16d46ebefSNico Weber //===-- wrappers_cpp.cpp ----------------------------------------*- C++ -*-===// 26d46ebefSNico Weber // 36d46ebefSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46d46ebefSNico Weber // See https://llvm.org/LICENSE.txt for license information. 56d46ebefSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66d46ebefSNico Weber // 76d46ebefSNico Weber //===----------------------------------------------------------------------===// 86d46ebefSNico Weber 96d46ebefSNico Weber #include "platform.h" 106d46ebefSNico Weber 116d46ebefSNico Weber // Skip this compilation unit if compiled as part of Bionic. 126d46ebefSNico Weber #if !SCUDO_ANDROID || !_BIONIC 136d46ebefSNico Weber 146d46ebefSNico Weber #include "allocator_config.h" 15*6ba8c8abSDominic Chen #include "wrappers_c.h" 166d46ebefSNico Weber 176d46ebefSNico Weber #include <stdint.h> 186d46ebefSNico Weber 196d46ebefSNico Weber namespace std { 206d46ebefSNico Weber struct nothrow_t {}; 216d46ebefSNico Weber enum class align_val_t : size_t {}; 226d46ebefSNico Weber } // namespace std 236d46ebefSNico Weber 246d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size) { 25681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::New); 266d46ebefSNico Weber } 276d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size) { 28681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::NewArray); 296d46ebefSNico Weber } 306d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, 316d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 32681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::New); 336d46ebefSNico Weber } 346d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, 356d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 36681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::NewArray); 376d46ebefSNico Weber } 386d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align) { 39681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::New, 406d46ebefSNico Weber static_cast<scudo::uptr>(align)); 416d46ebefSNico Weber } 426d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align) { 43681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::NewArray, 446d46ebefSNico Weber static_cast<scudo::uptr>(align)); 456d46ebefSNico Weber } 466d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align, 476d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 48681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::New, 496d46ebefSNico Weber static_cast<scudo::uptr>(align)); 506d46ebefSNico Weber } 516d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align, 526d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 53681773f2SPeter Collingbourne return Allocator.allocate(size, scudo::Chunk::Origin::NewArray, 546d46ebefSNico Weber static_cast<scudo::uptr>(align)); 556d46ebefSNico Weber } 566d46ebefSNico Weber 576d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr)NOEXCEPT { 58681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New); 596d46ebefSNico Weber } 606d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT { 61681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray); 626d46ebefSNico Weber } 636d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::nothrow_t const &)NOEXCEPT { 64681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New); 656d46ebefSNico Weber } 666d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 676d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 68681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray); 696d46ebefSNico Weber } 706d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size)NOEXCEPT { 71681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size); 726d46ebefSNico Weber } 736d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT { 74681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size); 756d46ebefSNico Weber } 766d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align)NOEXCEPT { 77681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0, 786d46ebefSNico Weber static_cast<scudo::uptr>(align)); 796d46ebefSNico Weber } 806d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 816d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 82681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 836d46ebefSNico Weber static_cast<scudo::uptr>(align)); 846d46ebefSNico Weber } 856d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align, 866d46ebefSNico Weber std::nothrow_t const &)NOEXCEPT { 87681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0, 886d46ebefSNico Weber static_cast<scudo::uptr>(align)); 896d46ebefSNico Weber } 906d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align, 916d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 92681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 936d46ebefSNico Weber static_cast<scudo::uptr>(align)); 946d46ebefSNico Weber } 956d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size, 966d46ebefSNico Weber std::align_val_t align)NOEXCEPT { 97681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size, 986d46ebefSNico Weber static_cast<scudo::uptr>(align)); 996d46ebefSNico Weber } 1006d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size, 1016d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 102681773f2SPeter Collingbourne Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size, 1036d46ebefSNico Weber static_cast<scudo::uptr>(align)); 1046d46ebefSNico Weber } 1056d46ebefSNico Weber 1066d46ebefSNico Weber #endif // !SCUDO_ANDROID || !_BIONIC 107