brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 098d4f7 Raw
151 lines · cpp
1//===-- wrappers_cpp.cpp ----------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "platform.h"10 11// Skip this compilation unit if compiled as part of Bionic.12#if !SCUDO_ANDROID || !_BIONIC13 14#include "allocator_config.h"15#include "internal_defs.h"16#include "platform.h"17#include "scudo/interface.h"18#include "wrappers_c.h"19 20#include <stdint.h>21 22namespace std {23struct nothrow_t {};24enum class align_val_t : size_t {};25} // namespace std26 27static void reportAllocation(void *ptr, size_t size) {28  if (SCUDO_ENABLE_HOOKS)29    if (__scudo_allocate_hook && ptr)30      __scudo_allocate_hook(ptr, size);31}32static void reportDeallocation(void *ptr) {33  if (SCUDO_ENABLE_HOOKS)34    if (__scudo_deallocate_hook)35      __scudo_deallocate_hook(ptr);36}37 38INTERFACE WEAK void *operator new(size_t size) {39  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::New);40  reportAllocation(Ptr, size);41  return Ptr;42}43INTERFACE WEAK void *operator new[](size_t size) {44  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::NewArray);45  reportAllocation(Ptr, size);46  return Ptr;47}48INTERFACE WEAK void *operator new(size_t size,49                                  std::nothrow_t const &) NOEXCEPT {50  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::New);51  reportAllocation(Ptr, size);52  return Ptr;53}54INTERFACE WEAK void *operator new[](size_t size,55                                    std::nothrow_t const &) NOEXCEPT {56  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::NewArray);57  reportAllocation(Ptr, size);58  return Ptr;59}60INTERFACE WEAK void *operator new(size_t size, std::align_val_t align) {61  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::New,62                                 static_cast<scudo::uptr>(align));63  reportAllocation(Ptr, size);64  return Ptr;65}66INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align) {67  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::NewArray,68                                 static_cast<scudo::uptr>(align));69  reportAllocation(Ptr, size);70  return Ptr;71}72INTERFACE WEAK void *operator new(size_t size, std::align_val_t align,73                                  std::nothrow_t const &) NOEXCEPT {74  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::New,75                                 static_cast<scudo::uptr>(align));76  reportAllocation(Ptr, size);77  return Ptr;78}79INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align,80                                    std::nothrow_t const &) NOEXCEPT {81  void *Ptr = Allocator.allocate(size, scudo::Chunk::Origin::NewArray,82                                 static_cast<scudo::uptr>(align));83  reportAllocation(Ptr, size);84  return Ptr;85}86 87INTERFACE WEAK void operator delete(void *ptr) NOEXCEPT {88  reportDeallocation(ptr);89  Allocator.deallocate(ptr, scudo::Chunk::Origin::New);90}91INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT {92  reportDeallocation(ptr);93  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);94}95INTERFACE WEAK void operator delete(void *ptr,96                                    std::nothrow_t const &) NOEXCEPT {97  reportDeallocation(ptr);98  Allocator.deallocate(ptr, scudo::Chunk::Origin::New);99}100INTERFACE WEAK void operator delete[](void *ptr,101                                      std::nothrow_t const &) NOEXCEPT {102  reportDeallocation(ptr);103  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);104}105INTERFACE WEAK void operator delete(void *ptr, size_t size) NOEXCEPT {106  reportDeallocation(ptr);107  Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size);108}109INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT {110  reportDeallocation(ptr);111  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size);112}113INTERFACE WEAK void operator delete(void *ptr,114                                    std::align_val_t align) NOEXCEPT {115  reportDeallocation(ptr);116  Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,117                       static_cast<scudo::uptr>(align));118}119INTERFACE WEAK void operator delete[](void *ptr,120                                      std::align_val_t align) NOEXCEPT {121  reportDeallocation(ptr);122  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,123                       static_cast<scudo::uptr>(align));124}125INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align,126                                    std::nothrow_t const &) NOEXCEPT {127  reportDeallocation(ptr);128  Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,129                       static_cast<scudo::uptr>(align));130}131INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align,132                                      std::nothrow_t const &) NOEXCEPT {133  reportDeallocation(ptr);134  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,135                       static_cast<scudo::uptr>(align));136}137INTERFACE WEAK void operator delete(void *ptr, size_t size,138                                    std::align_val_t align) NOEXCEPT {139  reportDeallocation(ptr);140  Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size,141                       static_cast<scudo::uptr>(align));142}143INTERFACE WEAK void operator delete[](void *ptr, size_t size,144                                      std::align_val_t align) NOEXCEPT {145  reportDeallocation(ptr);146  Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size,147                       static_cast<scudo::uptr>(align));148}149 150#endif // !SCUDO_ANDROID || !_BIONIC151