summaryrefslogtreecommitdiffstats
path: root/backtrace-symbols.c
diff options
context:
space:
mode:
authorLénaïc Huard <lenaic@lhuard.fr.eu.org>2010-02-17 23:12:59 +0100
committerLennart Poettering <lennart@poettering.net>2010-02-21 22:03:37 +0100
commitc11673a883ff9fd0d46e75d2f625340cf4a0166a (patch)
tree56ccfc7f406637701fd9f95ac8cdeb5fca7657ed /backtrace-symbols.c
parentbedf81eb994a1cd88473e37babcdb336e6444ff8 (diff)
Demangle C++ symbols name
Diffstat (limited to 'backtrace-symbols.c')
-rw-r--r--backtrace-symbols.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/backtrace-symbols.c b/backtrace-symbols.c
index 7499939..0a0d751 100644
--- a/backtrace-symbols.c
+++ b/backtrace-symbols.c
@@ -218,10 +218,16 @@ static char** translate_addresses_buf(bfd * abfd, bfd_vma *addr, int naddr)
total += snprintf(buf, len, "[0x%llx] \?\?() \?\?:0",(long long unsigned int) addr[naddr-1]) + 1;
} else {
const char *name;
+ char *demangled_name = NULL;
name = functionname;
if (name == NULL || *name == '\0')
name = "??";
+ else {
+ demangled_name = bfd_demangle(abfd, name, 0);
+ if (demangled_name != NULL)
+ name = demangled_name;
+ }
if (filename != NULL) {
char *h;
@@ -232,6 +238,8 @@ static char** translate_addresses_buf(bfd * abfd, bfd_vma *addr, int naddr)
total += snprintf(buf, len, "%s:%u\t%s()", filename ? filename : "??",
line, name) + 1;
+ if (demangled_name != NULL)
+ free(demangled_name);
}
if (state == Print) {
/* set buf just past the end of string */