From 8b7b6a414e8b44225120b8bd3f4a78728c2580f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Dee=20=28J=C5=8Dshin=29?= Date: Wed, 19 Jun 2024 09:01:41 -0700 Subject: [PATCH] Add weak specifiers to new.cc definitions The STL says that these should be replaceable by user code. --- ctl/new.cc | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/ctl/new.cc b/ctl/new.cc index 7cac144ec..6aa0c7962 100644 --- a/ctl/new.cc +++ b/ctl/new.cc @@ -28,7 +28,9 @@ constexpr auto a1 = align_val_t(1); } // namespace -void* +#define WEAK __attribute__((weak)) + +WEAK void* operator new(size_t n, align_val_t a) { void* p; @@ -38,79 +40,79 @@ operator new(size_t n, align_val_t a) return p; } -void* +WEAK void* operator new[](size_t n, align_val_t a) { return operator new(n, a); } -void* +WEAK void* operator new(size_t n) { return operator new(n, a1); } -void* +WEAK void* operator new[](size_t n) { return operator new(n, a1); } -void* +WEAK void* operator new(size_t, void* p) { return p; } -void* +WEAK void* operator new[](size_t, void* p) { return p; } -void +WEAK void operator delete(void* p) noexcept { free(p); } -void +WEAK void operator delete[](void* p) noexcept { free(p); } -void +WEAK void operator delete(void* p, align_val_t) noexcept { free(p); } -void +WEAK void operator delete[](void* p, align_val_t) noexcept { free(p); } -void +WEAK void operator delete(void* p, size_t) noexcept { free(p); } -void +WEAK void operator delete[](void* p, size_t) noexcept { free(p); } -void +WEAK void operator delete(void* p, size_t, align_val_t) noexcept { free(p); } -void +WEAK void operator delete[](void* p, size_t, align_val_t) noexcept { free(p); } -void +WEAK void operator delete(void*, void*) noexcept { } -void +WEAK void operator delete[](void*, void*) noexcept { }