diff options
author | Lénaïc Huard <lenaic@lhuard.fr.eu.org> | 2010-02-17 23:12:59 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-02-21 22:03:37 +0100 |
commit | c11673a883ff9fd0d46e75d2f625340cf4a0166a (patch) | |
tree | 56ccfc7f406637701fd9f95ac8cdeb5fca7657ed /backtrace-symbols.c | |
parent | bedf81eb994a1cd88473e37babcdb336e6444ff8 (diff) |
Demangle C++ symbols name
Diffstat (limited to 'backtrace-symbols.c')
-rw-r--r-- | backtrace-symbols.c | 8 |
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 */ |