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" 156d46ebefSNico Weber 166d46ebefSNico Weber #include <stdint.h> 176d46ebefSNico Weber 18*9ef6faf4SKostya Kortchinsky extern "C" void malloc_postinit(); 19*9ef6faf4SKostya Kortchinsky extern scudo::Allocator<scudo::Config, malloc_postinit> *AllocatorPtr; 206d46ebefSNico Weber 216d46ebefSNico Weber namespace std { 226d46ebefSNico Weber struct nothrow_t {}; 236d46ebefSNico Weber enum class align_val_t : size_t {}; 246d46ebefSNico Weber } // namespace std 256d46ebefSNico Weber 266d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size) { 276d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New); 286d46ebefSNico Weber } 296d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size) { 306d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray); 316d46ebefSNico Weber } 326d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, 336d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 346d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New); 356d46ebefSNico Weber } 366d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, 376d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 386d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray); 396d46ebefSNico Weber } 406d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align) { 416d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New, 426d46ebefSNico Weber static_cast<scudo::uptr>(align)); 436d46ebefSNico Weber } 446d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align) { 456d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray, 466d46ebefSNico Weber static_cast<scudo::uptr>(align)); 476d46ebefSNico Weber } 486d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align, 496d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 506d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New, 516d46ebefSNico Weber static_cast<scudo::uptr>(align)); 526d46ebefSNico Weber } 536d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align, 546d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 556d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray, 566d46ebefSNico Weber static_cast<scudo::uptr>(align)); 576d46ebefSNico Weber } 586d46ebefSNico Weber 596d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr)NOEXCEPT { 606d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New); 616d46ebefSNico Weber } 626d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT { 636d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray); 646d46ebefSNico Weber } 656d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::nothrow_t const &)NOEXCEPT { 666d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New); 676d46ebefSNico Weber } 686d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 696d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 706d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray); 716d46ebefSNico Weber } 726d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size)NOEXCEPT { 736d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, size); 746d46ebefSNico Weber } 756d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT { 766d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, size); 776d46ebefSNico Weber } 786d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align)NOEXCEPT { 796d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, 0, 806d46ebefSNico Weber static_cast<scudo::uptr>(align)); 816d46ebefSNico Weber } 826d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 836d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 846d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 856d46ebefSNico Weber static_cast<scudo::uptr>(align)); 866d46ebefSNico Weber } 876d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align, 886d46ebefSNico Weber std::nothrow_t const &)NOEXCEPT { 896d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, 0, 906d46ebefSNico Weber static_cast<scudo::uptr>(align)); 916d46ebefSNico Weber } 926d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align, 936d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 946d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 956d46ebefSNico Weber static_cast<scudo::uptr>(align)); 966d46ebefSNico Weber } 976d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size, 986d46ebefSNico Weber std::align_val_t align)NOEXCEPT { 996d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, size, 1006d46ebefSNico Weber static_cast<scudo::uptr>(align)); 1016d46ebefSNico Weber } 1026d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size, 1036d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 1046d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, size, 1056d46ebefSNico Weber static_cast<scudo::uptr>(align)); 1066d46ebefSNico Weber } 1076d46ebefSNico Weber 1086d46ebefSNico Weber #endif // !SCUDO_ANDROID || !_BIONIC 109