diff options
author | Alan Modra <amodra@gmail.com> | 2008-07-07 11:48:27 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2008-07-07 11:48:27 +0000 |
commit | c29aae594a3a7cd5c12dea0901ad516c1c759a75 (patch) | |
tree | bb58833dd478084b32fa230bf39916fcb99d1690 /bfd/bfd.c | |
parent | 2b4590fb4681a245f4b28c5b6121e0982a0c404a (diff) | |
download | gdb-c29aae594a3a7cd5c12dea0901ad516c1c759a75.zip gdb-c29aae594a3a7cd5c12dea0901ad516c1c759a75.tar.gz gdb-c29aae594a3a7cd5c12dea0901ad516c1c759a75.tar.bz2 |
* bfd.c (bfd_demangle): Always trim off bfd_get_symbol_leading_char.
Diffstat (limited to 'bfd/bfd.c')
-rw-r--r-- | bfd/bfd.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -1829,10 +1829,12 @@ bfd_demangle (bfd *abfd, const char *name, int options) char *res, *alloc; const char *pre, *suf; size_t pre_len; + bfd_boolean skip_lead; - if (abfd != NULL - && *name != '\0' - && bfd_get_symbol_leading_char (abfd) == *name) + skip_lead = (abfd != NULL + && *name != '\0' + && bfd_get_symbol_leading_char (abfd) == *name); + if (skip_lead) ++name; /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF @@ -1863,7 +1865,18 @@ bfd_demangle (bfd *abfd, const char *name, int options) free (alloc); if (res == NULL) - return NULL; + { + if (skip_lead) + { + size_t len = strlen (pre) + 1; + alloc = bfd_malloc (len); + if (alloc == NULL) + return NULL; + memcpy (alloc, pre, len); + return alloc; + } + return NULL; + } /* Put back any prefix or suffix. */ if (pre_len != 0 || suf != NULL) |