Message ID | 20221213210247.50375-1-gcc@hazardy.de |
---|---|
State | New |
Headers | show |
Series | libstdc++: Deliver names of C functions in <stacktrace> | expand |
On Tue, 13 Dec 2022 at 21:03, Björn Schäpers <gcc@hazardy.de> wrote: > > 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. Thanks for the patch, I'll push this. I think we do want to check whether to call __cxa_demangle, because otherwise an extern "C" function called simply "g" will get demangled to "__float128" and that's not right! So I think we should check whether the function name starts with "_Z" which indicates a C++ function name. That can be improved later though. > > -- >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 | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace > index 83c6463b0d8..5baf2dcdaca 100644 > --- a/libstdc++-v3/include/std/stacktrace > +++ b/libstdc++-v3/include/std/stacktrace > @@ -219,6 +219,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > &__status); > if (__status == 0) > __s = __str; > + else > + __s = __name; > __builtin_free(__str); > return __s; > } > -- > 2.38.1 >
diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 83c6463b0d8..5baf2dcdaca 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -219,6 +219,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION &__status); if (__status == 0) __s = __str; + else + __s = __name; __builtin_free(__str); return __s; }