| // Copyright 2019 The Fuchsia Authors |
| // |
| // Use of this source code is governed by a MIT-style |
| // license that can be found in the LICENSE file or at |
| // https://opensource.org/licenses/MIT |
| |
| #include <new> |
| |
| // Placement new operators are inlined in the <new> header. |
| // No linkage definitions are required. |
| // Vanilla allocating new operators are not allowed in the kernel. |
| // AllocChecker new operators are defined in <fbl/alloc_checker.h>. |
| |
| #include <cstdlib> |
| |
| void operator delete(void* p) { free(p); } |
| |
| void operator delete[](void* p) { free(p); } |
| |
| void operator delete(void* p, size_t s) { sized_free(p, s); } |
| |
| void operator delete[](void* p, size_t s) { sized_free(p, s); } |
| |
| void operator delete(void* p, std::align_val_t align) { free(p); } |
| |
| void operator delete[](void* p, std::align_val_t align) { free(p); } |
| |
| void operator delete(void* p, std::size_t s, std::align_val_t align) { sized_free(p, s); } |
| |
| void operator delete[](void* p, std::size_t s, std::align_val_t align) { sized_free(p, s); } |
| |
| // These are the mangled names of all the functions above. Because these |
| // functions are magical in the language, the compiler insists on making |
| // default-visibility definitions regardless of all the ways to tell it to use |
| // hidden visibility. So there is nothing left but to go around the compiler's |
| // back and force them to .hidden via assembler directives. |
| asm(".hidden _ZdaPv"); |
| asm(".hidden _ZdaPvm"); |
| asm(".hidden _ZdlPv"); |
| asm(".hidden _ZdlPvm"); |
| asm(".hidden _ZdlPvSt11align_val_t"); |
| asm(".hidden _ZdaPvSt11align_val_t"); |
| asm(".hidden _ZdlPvmSt11align_val_t"); |
| asm(".hidden _ZdaPvmSt11align_val_t"); |