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 */ | 
