blob: 45e6c94f2627d45323949975312b20125f08921e [file] [log] [blame]
// 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");