libstdc++: Deliver names of C functions in <stacktrace>
Checks
Commit Message
From: Björn Schäpers <bjoern@hazardy.de>
One could add (), these are not part of __name. One could also try to
check upfront if __cxa_demangle should be called at all.
-- >8 --
Tested on i686-w64-mingw32.
__cxa_demangle is only to demangle C++ names, for all C functions,
extern "C" functions, and including main it returns -2, in that case
just adapt the given name. Otherwise it's kept empty, which doesn't look
nice in the stacktrace.
libstdc++-v3/ChangeLog:
* include/std/stacktrace (stacktrace_entry::_S_demangle): Use
raw __name if __cxa_demangle could not demangle it.
Signed-off-by: Björn Schäpers <bjoern@hazardy.de>
---
libstdc++-v3/include/std/stacktrace | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
@@ -217,8 +217,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
int __status;
char* __str = __cxxabiv1::__cxa_demangle(__name, nullptr, nullptr,
&__status);
- if (__status == 0)
+ switch (__status)
+ {
+ case 0:
__s = __str;
+ break;
+ case -2:
+ __s = __name;
+ break;
+ }
__builtin_free(__str);
return __s;
}