From: Jonathan Wakely Date: Wed, 27 Nov 2024 11:52:40 +0000 (+0000) Subject: libstdc++: Add cold attribute to assertion failure functions [PR117650] X-Git-Tag: basepoints/gcc-16~3821 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17db5742a555d4f8fd5fa324adb6d1e5c55374be;p=thirdparty%2Fgcc.git libstdc++: Add cold attribute to assertion failure functions [PR117650] This helps the compiler to split the cold path into a separate clone, so that the hot path is a smaller function that uses less icache, and the cold path is only fetched into the icache if actually executed. libstdc++-v3/ChangeLog: PR libstdc++/117650 * include/bits/c++config (__glibcxx_assert_fail): Add cold attribute. * include/debug/formatter.h (_Error_formatter::_M_error): Likewise. --- diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 236906d2f79f..c74b03013fdb 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -610,7 +610,7 @@ namespace std { #pragma GCC visibility push(default) // Don't use because this should be unaffected by NDEBUG. - extern "C++" _GLIBCXX_NORETURN + extern "C++" _GLIBCXX_NORETURN __attribute__((__cold__)) void __glibcxx_assert_fail /* Called when a precondition violation is detected. */ (const char* __file, int __line, const char* __function, diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h index 4f5a4539bb9f..df7f6965a4c8 100644 --- a/libstdc++-v3/include/debug/formatter.h +++ b/libstdc++-v3/include/debug/formatter.h @@ -571,7 +571,7 @@ namespace __gnu_debug _Error_formatter& _M_message(_Debug_msg_id __id) const throw (); - _GLIBCXX_NORETURN void + _GLIBCXX_NORETURN __attribute__((__cold__)) void _M_error() const; #if !_GLIBCXX_INLINE_VERSION