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"
156ba8c8abSDominic 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 
operator new(size_t size)246d46ebefSNico Weber INTERFACE WEAK void *operator new(size_t size) {
25681773f2SPeter Collingbourne   return Allocator.allocate(size, scudo::Chunk::Origin::New);
266d46ebefSNico Weber }
operator new[](size_t size)276d46ebefSNico Weber INTERFACE WEAK void *operator new[](size_t size) {
28681773f2SPeter Collingbourne   return Allocator.allocate(size, scudo::Chunk::Origin::NewArray);
296d46ebefSNico Weber }
operator new(size_t size,std::nothrow_t const &)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 }
operator new[](size_t size,std::nothrow_t const &)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 }
operator new(size_t size,std::align_val_t align)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 }
operator new[](size_t size,std::align_val_t align)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 }
operator new(size_t size,std::align_val_t align,std::nothrow_t const &)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 }
operator new[](size_t size,std::align_val_t align,std::nothrow_t const &)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 
operator delete(void * ptr)576d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr) NOEXCEPT {
58681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New);
596d46ebefSNico Weber }
operator delete[](void * ptr)606d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT {
61681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);
626d46ebefSNico Weber }
operator delete(void * ptr,std::nothrow_t const &)63*e831ea69SMitch Phillips INTERFACE WEAK void operator delete(void *ptr,
64*e831ea69SMitch Phillips                                     std::nothrow_t const &) NOEXCEPT {
65681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New);
666d46ebefSNico Weber }
operator delete[](void * ptr,std::nothrow_t const &)676d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr,
686d46ebefSNico Weber                                       std::nothrow_t const &) NOEXCEPT {
69681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);
706d46ebefSNico Weber }
operator delete(void * ptr,size_t size)716d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size) NOEXCEPT {
72681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size);
736d46ebefSNico Weber }
operator delete[](void * ptr,size_t size)746d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT {
75681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size);
766d46ebefSNico Weber }
operator delete(void * ptr,std::align_val_t align)77*e831ea69SMitch Phillips INTERFACE WEAK void operator delete(void *ptr,
78*e831ea69SMitch Phillips                                     std::align_val_t align) NOEXCEPT {
79681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,
806d46ebefSNico Weber                        static_cast<scudo::uptr>(align));
816d46ebefSNico Weber }
operator delete[](void * ptr,std::align_val_t align)826d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr,
836d46ebefSNico Weber                                       std::align_val_t align) NOEXCEPT {
84681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,
856d46ebefSNico Weber                        static_cast<scudo::uptr>(align));
866d46ebefSNico Weber }
operator delete(void * ptr,std::align_val_t align,std::nothrow_t const &)876d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align,
886d46ebefSNico Weber                                     std::nothrow_t const &) NOEXCEPT {
89681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,
906d46ebefSNico Weber                        static_cast<scudo::uptr>(align));
916d46ebefSNico Weber }
operator delete[](void * ptr,std::align_val_t align,std::nothrow_t const &)926d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align,
936d46ebefSNico Weber                                       std::nothrow_t const &) NOEXCEPT {
94681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,
956d46ebefSNico Weber                        static_cast<scudo::uptr>(align));
966d46ebefSNico Weber }
operator delete(void * ptr,size_t size,std::align_val_t align)976d46ebefSNico Weber INTERFACE WEAK void operator delete(void *ptr, size_t size,
986d46ebefSNico Weber                                     std::align_val_t align) NOEXCEPT {
99681773f2SPeter Collingbourne   Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size,
1006d46ebefSNico Weber                        static_cast<scudo::uptr>(align));
1016d46ebefSNico Weber }
operator delete[](void * ptr,size_t size,std::align_val_t align)1026d46ebefSNico Weber INTERFACE WEAK void operator delete[](void *ptr, size_t size,
1036d46ebefSNico Weber                                       std::align_val_t align) NOEXCEPT {
104681773f2SPeter Collingbourne   Allocator.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