diff --git a/cores/arduino/new b/cores/arduino/new index 8cf21038e..8f2fa0e43 100644 --- a/cores/arduino/new +++ b/cores/arduino/new @@ -39,25 +39,25 @@ namespace std { using size_t = ::size_t; } // namespace std -[[gnu::weak]] void * operator new(std::size_t size); -[[gnu::weak]] void * operator new[](std::size_t size); +void * operator new(std::size_t size); +void * operator new[](std::size_t size); -[[gnu::weak]] void * operator new(std::size_t size, const std::nothrow_t tag) noexcept; -[[gnu::weak]] void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept; +void * operator new(std::size_t size, const std::nothrow_t tag) noexcept; +void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept; void * operator new(std::size_t size, void *place) noexcept; void * operator new[](std::size_t size, void *place) noexcept; -[[gnu::weak]] void operator delete(void * ptr) noexcept; -[[gnu::weak]] void operator delete[](void * ptr) noexcept; +void operator delete(void * ptr) noexcept; +void operator delete[](void * ptr) noexcept; #if __cplusplus >= 201402L -[[gnu::weak]] void operator delete(void* ptr, std::size_t size) noexcept; -[[gnu::weak]] void operator delete[](void * ptr, std::size_t size) noexcept; +void operator delete(void* ptr, std::size_t size) noexcept; +void operator delete[](void * ptr, std::size_t size) noexcept; #endif // __cplusplus >= 201402L -[[gnu::weak]] void operator delete(void* ptr, const std::nothrow_t& tag) noexcept; -[[gnu::weak]] void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept; +void operator delete(void* ptr, const std::nothrow_t& tag) noexcept; +void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept; void operator delete(void* ptr, void* place) noexcept; void operator delete[](void* ptr, void* place) noexcept; diff --git a/cores/arduino/new.cpp b/cores/arduino/new.cpp index 7ca493169..c024d1d7f 100644 --- a/cores/arduino/new.cpp +++ b/cores/arduino/new.cpp @@ -44,7 +44,7 @@ static void * new_helper(std::size_t size) { return malloc(size); } -void * operator new(std::size_t size) { +[[gnu::weak]] void * operator new(std::size_t size) { void *res = new_helper(size); #if defined(NEW_TERMINATES_ON_FAILURE) if (!res) @@ -52,11 +52,11 @@ void * operator new(std::size_t size) { #endif return res; } -void * operator new[](std::size_t size) { +[[gnu::weak]] void * operator new[](std::size_t size) { return operator new(size); } -void * operator new(std::size_t size, const std::nothrow_t tag) noexcept { +[[gnu::weak]] void * operator new(std::size_t size, [[gnu::unused]] const std::nothrow_t tag) noexcept { #if defined(NEW_TERMINATES_ON_FAILURE) // Cannot call throwing operator new as standard suggests, so call // new_helper directly then @@ -65,7 +65,7 @@ void * operator new(std::size_t size, const std::nothrow_t tag) noexcept { return operator new(size); #endif } -void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept { +[[gnu::weak]] void * operator new[](std::size_t size, [[gnu::unused]] const std::nothrow_t& tag) noexcept { #if defined(NEW_TERMINATES_ON_FAILURE) // Cannot call throwing operator new[] as standard suggests, so call // malloc directly then @@ -84,26 +84,26 @@ void * operator new[](std::size_t size, void *place) noexcept { return operator new(size, place); } -void operator delete(void * ptr) noexcept { +[[gnu::weak]] void operator delete(void * ptr) noexcept { free(ptr); } -void operator delete[](void * ptr) noexcept { +[[gnu::weak]] void operator delete[](void * ptr) noexcept { operator delete(ptr); } #if __cplusplus >= 201402L -void operator delete(void* ptr, std::size_t size) noexcept { +[[gnu::weak]] void operator delete(void* ptr, std::size_t size) noexcept { operator delete(ptr); } -void operator delete[](void * ptr, std::size_t size) noexcept { +[[gnu::weak]] void operator delete[](void * ptr, std::size_t size) noexcept { operator delete[](ptr); } #endif // __cplusplus >= 201402L -void operator delete(void* ptr, const std::nothrow_t& tag) noexcept { +[[gnu::weak]] void operator delete(void* ptr, [[gnu::unused]] const std::nothrow_t& tag) noexcept { operator delete(ptr); } -void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept { +[[gnu::weak]] void operator delete[](void* ptr, [[gnu::unused]] const std::nothrow_t& tag) noexcept { operator delete[](ptr); }