* [PATCH] libstdc++: Deliver names of C functions in <stacktrace>
[not found] <7973b22e-791b-a61e-e354-3e6f02e5a731@gmail.com>
@ 2022-12-13 21:02 ` Björn Schäpers
2023-01-14 20:37 ` Jonathan Wakely
0 siblings, 1 reply; 4+ messages in thread
From: Björn Schäpers @ 2022-12-13 21:02 UTC (permalink / raw)
To: gcc-patches, libstdc++, frs.dumont
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 | 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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] libstdc++: Deliver names of C functions in <stacktrace>
2022-12-13 21:02 ` [PATCH] libstdc++: Deliver names of C functions in <stacktrace> Björn Schäpers
@ 2023-01-14 20:37 ` Jonathan Wakely
0 siblings, 0 replies; 4+ messages in thread
From: Jonathan Wakely @ 2023-01-14 20:37 UTC (permalink / raw)
To: Björn Schäpers; +Cc: gcc-patches, libstdc++, frs.dumont
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
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] libstdc++: Deliver names of C functions in <stacktrace>
@ 2022-12-12 17:56 Björn Schäpers
0 siblings, 0 replies; 4+ messages in thread
From: Björn Schäpers @ 2022-12-12 17:56 UTC (permalink / raw)
To: gcc-patches, libstdc++
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(-)
diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace
index 83c6463b0d8..6d4051b9f5b 100644
--- a/libstdc++-v3/include/std/stacktrace
+++ b/libstdc++-v3/include/std/stacktrace
@@ -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;
}
--
2.38.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] libstdc++: Deliver names of C functions in <stacktrace>
@ 2022-12-12 17:55 Björn Schäpers
0 siblings, 0 replies; 4+ messages in thread
From: Björn Schäpers @ 2022-12-12 17:55 UTC (permalink / raw)
To: gcc-patches, libstdc++
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(-)
diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace
index 83c6463b0d8..6d4051b9f5b 100644
--- a/libstdc++-v3/include/std/stacktrace
+++ b/libstdc++-v3/include/std/stacktrace
@@ -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;
}
--
2.38.1
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-01-14 20:37 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <7973b22e-791b-a61e-e354-3e6f02e5a731@gmail.com>
2022-12-13 21:02 ` [PATCH] libstdc++: Deliver names of C functions in <stacktrace> Björn Schäpers
2023-01-14 20:37 ` Jonathan Wakely
2022-12-12 17:56 Björn Schäpers
-- strict thread matches above, loose matches on Subject: below --
2022-12-12 17:55 Björn Schäpers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).