1*6d46ebefSNico Weber //===-- wrappers_cpp.cpp ----------------------------------------*- C++ -*-===// 2*6d46ebefSNico Weber // 3*6d46ebefSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*6d46ebefSNico Weber // See https://llvm.org/LICENSE.txt for license information. 5*6d46ebefSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*6d46ebefSNico Weber // 7*6d46ebefSNico Weber //===----------------------------------------------------------------------===// 8*6d46ebefSNico Weber 9*6d46ebefSNico Weber #include "platform.h" 10*6d46ebefSNico Weber 11*6d46ebefSNico Weber // Skip this compilation unit if compiled as part of Bionic. 12*6d46ebefSNico Weber #if !SCUDO_ANDROID || !_BIONIC 13*6d46ebefSNico Weber 14*6d46ebefSNico Weber #include "allocator_config.h" 15*6d46ebefSNico Weber 16*6d46ebefSNico Weber #include <stdint.h> 17*6d46ebefSNico Weber 18*6d46ebefSNico Weber extern scudo::Allocator<scudo::Config> *AllocatorPtr; 19*6d46ebefSNico Weber 20*6d46ebefSNico Weber namespace std { 21*6d46ebefSNico Weber struct nothrow_t {}; 22*6d46ebefSNico Weber enum class align_val_t : size_t {}; 23*6d46ebefSNico Weber } // namespace std 24*6d46ebefSNico Weber 25*6d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size) { 26*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New); 27*6d46ebefSNico Weber } 28*6d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size) { 29*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray); 30*6d46ebefSNico Weber } 31*6d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, 32*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 33*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New); 34*6d46ebefSNico Weber } 35*6d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, 36*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 37*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray); 38*6d46ebefSNico Weber } 39*6d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align) { 40*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New, 41*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 42*6d46ebefSNico Weber } 43*6d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align) { 44*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray, 45*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 46*6d46ebefSNico Weber } 47*6d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size, std::align_val_t align, 48*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 49*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::New, 50*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 51*6d46ebefSNico Weber } 52*6d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align, 53*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 54*6d46ebefSNico Weber return AllocatorPtr->allocate(size, scudo::Chunk::Origin::NewArray, 55*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 56*6d46ebefSNico Weber } 57*6d46ebefSNico Weber 58*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr)NOEXCEPT { 59*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New); 60*6d46ebefSNico Weber } 61*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT { 62*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray); 63*6d46ebefSNico Weber } 64*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::nothrow_t const &)NOEXCEPT { 65*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New); 66*6d46ebefSNico Weber } 67*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 68*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 69*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray); 70*6d46ebefSNico Weber } 71*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size)NOEXCEPT { 72*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, size); 73*6d46ebefSNico Weber } 74*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT { 75*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, size); 76*6d46ebefSNico Weber } 77*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align)NOEXCEPT { 78*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, 0, 79*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 80*6d46ebefSNico Weber } 81*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, 82*6d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 83*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 84*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 85*6d46ebefSNico Weber } 86*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align, 87*6d46ebefSNico Weber std::nothrow_t const &)NOEXCEPT { 88*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, 0, 89*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 90*6d46ebefSNico Weber } 91*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align, 92*6d46ebefSNico Weber std::nothrow_t const &) NOEXCEPT { 93*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, 0, 94*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 95*6d46ebefSNico Weber } 96*6d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size, 97*6d46ebefSNico Weber std::align_val_t align)NOEXCEPT { 98*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::New, size, 99*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 100*6d46ebefSNico Weber } 101*6d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size, 102*6d46ebefSNico Weber std::align_val_t align) NOEXCEPT { 103*6d46ebefSNico Weber AllocatorPtr->deallocate(ptr, scudo::Chunk::Origin::NewArray, size, 104*6d46ebefSNico Weber static_cast<scudo::uptr>(align)); 105*6d46ebefSNico Weber } 106*6d46ebefSNico Weber 107*6d46ebefSNico Weber #endif // !SCUDO_ANDROID || !_BIONIC 108