* bfd.c (bfd_demangle): Always trim off bfd_get_symbol_leading_char.
authorAlan Modra <amodra@gmail.com>
Mon, 7 Jul 2008 11:48:27 +0000 (11:48 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 7 Jul 2008 11:48:27 +0000 (11:48 +0000)
bfd/ChangeLog
bfd/bfd.c

index abadb37dd824dca078e5c6f2d2bdebb1b3dbb576..ef2ac33741f53338855f50991cdc3f88a0765b54 100644 (file)
@@ -1,3 +1,7 @@
+2008-07-07  Alan Modra  <amodra@bigpond.net.au>
+
+       * bfd.c (bfd_demangle): Always trim off bfd_get_symbol_leading_char.
+
 2008-07-02  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-ppc.c (is_pic_glink_stub): New function.
index 7e6e872feb51941aa7ae71f356f2e509e384295f..ed89e664cc79ad6e6a1f9ab545d078d5939dcece 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -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)