blob: adb104118123291273cb06bca417b4a1b18e91fa [file] [log] [blame]
Dynamic Tools Team517193e2019-09-11 14:48:41 +00001//===-- 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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "platform.h"
10
11// Skip this compilation unit if compiled as part of Bionic.
12#if !SCUDO_ANDROID || !_BIONIC
13
14#include "allocator_config.h"
15
16#include <stdint.h>
17
Dynamic Tools Team83eaa512020-01-09 11:43:16 -080018extern "C" void malloc_postinit();
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080019extern HIDDEN scudo::Allocator<scudo::Config, malloc_postinit> Allocator;
Dynamic Tools Team517193e2019-09-11 14:48:41 +000020
21namespace std {
22struct nothrow_t {};
23enum class align_val_t : size_t {};
24} // namespace std
25
26INTERFACE WEAK void *operator new(size_t size) {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080027 return Allocator.allocate(size, scudo::Chunk::Origin::New);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000028}
29INTERFACE WEAK void *operator new[](size_t size) {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080030 return Allocator.allocate(size, scudo::Chunk::Origin::NewArray);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000031}
32INTERFACE WEAK void *operator new(size_t size,
33 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080034 return Allocator.allocate(size, scudo::Chunk::Origin::New);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000035}
36INTERFACE WEAK void *operator new[](size_t size,
37 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080038 return Allocator.allocate(size, scudo::Chunk::Origin::NewArray);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000039}
40INTERFACE WEAK void *operator new(size_t size, std::align_val_t align) {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080041 return Allocator.allocate(size, scudo::Chunk::Origin::New,
42 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000043}
44INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align) {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080045 return Allocator.allocate(size, scudo::Chunk::Origin::NewArray,
46 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000047}
48INTERFACE WEAK void *operator new(size_t size, std::align_val_t align,
49 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080050 return Allocator.allocate(size, scudo::Chunk::Origin::New,
51 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000052}
53INTERFACE WEAK void *operator new[](size_t size, std::align_val_t align,
54 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080055 return Allocator.allocate(size, scudo::Chunk::Origin::NewArray,
56 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000057}
58
59INTERFACE WEAK void operator delete(void *ptr)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080060 Allocator.deallocate(ptr, scudo::Chunk::Origin::New);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000061}
62INTERFACE WEAK void operator delete[](void *ptr) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080063 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000064}
65INTERFACE WEAK void operator delete(void *ptr, std::nothrow_t const &)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080066 Allocator.deallocate(ptr, scudo::Chunk::Origin::New);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000067}
68INTERFACE WEAK void operator delete[](void *ptr,
69 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080070 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000071}
72INTERFACE WEAK void operator delete(void *ptr, size_t size)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080073 Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000074}
75INTERFACE WEAK void operator delete[](void *ptr, size_t size) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080076 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size);
Dynamic Tools Team517193e2019-09-11 14:48:41 +000077}
78INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080079 Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,
80 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000081}
82INTERFACE WEAK void operator delete[](void *ptr,
83 std::align_val_t align) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080084 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,
85 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000086}
87INTERFACE WEAK void operator delete(void *ptr, std::align_val_t align,
88 std::nothrow_t const &)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080089 Allocator.deallocate(ptr, scudo::Chunk::Origin::New, 0,
90 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000091}
92INTERFACE WEAK void operator delete[](void *ptr, std::align_val_t align,
93 std::nothrow_t const &) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080094 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, 0,
95 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +000096}
97INTERFACE WEAK void operator delete(void *ptr, size_t size,
98 std::align_val_t align)NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -080099 Allocator.deallocate(ptr, scudo::Chunk::Origin::New, size,
100 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +0000101}
102INTERFACE WEAK void operator delete[](void *ptr, size_t size,
103 std::align_val_t align) NOEXCEPT {
Dynamic Tools Team130bfdb2020-02-10 15:53:07 -0800104 Allocator.deallocate(ptr, scudo::Chunk::Origin::NewArray, size,
105 static_cast<scudo::uptr>(align));
Dynamic Tools Team517193e2019-09-11 14:48:41 +0000106}
107
108#endif // !SCUDO_ANDROID || !_BIONIC