123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifdef BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_CPP_SYMBOLS_H_
- #error This header is meant to be included only once by allocator_shim.cc
- #endif
- #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_CPP_SYMBOLS_H_
- // Preempt the default new/delete C++ symbols so they call the shim entry
- // points. This file is strongly inspired by tcmalloc's
- // libc_override_redefine.h.
- #include <new>
- #include "base/allocator/allocator_shim_internals.h"
- #include "base/compiler_specific.h"
- #include "build/build_config.h"
- #if !BUILDFLAG(IS_APPLE)
- #define SHIM_CPP_SYMBOLS_EXPORT SHIM_ALWAYS_EXPORT
- #else
- // On Apple OSes, prefer not exporting these symbols (as this reverts to the
- // default behavior, they are still exported in e.g. component builds). This is
- // partly due to intentional limits on exported symbols in the main library, but
- // it is also needless, since no library used on macOS imports these.
- //
- // TODO(lizeb): It may not be necessary anywhere to export these.
- #define SHIM_CPP_SYMBOLS_EXPORT NOINLINE
- #endif
- SHIM_CPP_SYMBOLS_EXPORT void* operator new(size_t size) {
- return ShimCppNew(size);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new[](size_t size) {
- return ShimCppNew(size);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new(size_t size,
- const std::nothrow_t&) __THROW {
- return ShimCppNewNoThrow(size);
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new[](size_t size,
- const std::nothrow_t&) __THROW {
- return ShimCppNewNoThrow(size);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p,
- const std::nothrow_t&) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p,
- const std::nothrow_t&) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p, size_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p, size_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new(std::size_t size,
- std::align_val_t alignment) {
- return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new(std::size_t size,
- std::align_val_t alignment,
- const std::nothrow_t&) __THROW {
- return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p,
- std::align_val_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p,
- std::size_t size,
- std::align_val_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete(void* p,
- std::align_val_t,
- const std::nothrow_t&) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new[](std::size_t size,
- std::align_val_t alignment) {
- return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
- }
- SHIM_CPP_SYMBOLS_EXPORT void* operator new[](std::size_t size,
- std::align_val_t alignment,
- const std::nothrow_t&) __THROW {
- return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p,
- std::align_val_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p,
- std::size_t size,
- std::align_val_t) __THROW {
- ShimCppDelete(p);
- }
- SHIM_CPP_SYMBOLS_EXPORT void operator delete[](void* p,
- std::align_val_t,
- const std::nothrow_t&) __THROW {
- ShimCppDelete(p);
- }
|