Resolve PR ld/16569 by emitting (and comparing) unmangled names, unless
authorDan Mick <dan.mick@inktank.com>
Wed, 26 Feb 2014 12:05:02 +0000 (12:05 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 26 Feb 2014 12:05:02 +0000 (12:05 +0000)
demangling has specifically been requested.

ld/ChangeLog
ld/ldcref.c

index 99304348c4ac1e688869582c07bb5a22907a05de..4a2fa1cef0b29d4fdd6e7d6a05d7f6bb98844214 100644 (file)
@@ -1,3 +1,11 @@
+2014-02-26  Dan Mick  <dan.mick@inktank.com>
+
+       PR ld/16569
+       * ldcref.c (cref_sort_array): Compare unmangled names unless
+       demanglng has been requiested.
+       (output_one_cref): Output unmangled name unless demangling has
+       been requested.
+
 2014-02-19  Igor Zamyatin  <igor.zamyatin@intel.com>
            H.J. Lu  <hongjiu.lu@intel.com>
 
index 56b917d4bfe3597e2f100224fb7bedf6693da034..10d57c587b135d7b883f01fe7780156271fb376e 100644 (file)
@@ -1,5 +1,5 @@
 /* ldcref.c -- output a cross reference table
-   Copyright 1996-2013 Free Software Foundation, Inc.
+   Copyright 1996-2014 Free Software Foundation, Inc.
    Written by Ian Lance Taylor <ian@cygnus.com>
 
    This file is part of the GNU Binutils.
@@ -40,7 +40,8 @@
 /* We keep an instance of this structure for each reference to a
    symbol from a given object.  */
 
-struct cref_ref {
+struct cref_ref
+{
   /* The next reference.  */
   struct cref_ref *next;
   /* The object.  */
@@ -55,7 +56,8 @@ struct cref_ref {
 
 /* We keep a hash table of symbols.  Each entry looks like this.  */
 
-struct cref_hash_entry {
+struct cref_hash_entry
+{
   struct bfd_hash_entry root;
   /* The demangled name.  */
   const char *demangled;
@@ -65,7 +67,8 @@ struct cref_hash_entry {
 
 /* This is what the hash table looks like.  */
 
-struct cref_hash_table {
+struct cref_hash_table
+{
   struct bfd_hash_table root;
 };
 
@@ -109,8 +112,8 @@ static size_t cref_symcount;
 static struct bfd_hash_entry **old_table;
 static unsigned int old_size;
 static unsigned int old_count;
-static void *old_tab;
-static void *alloc_mark;
+static void * old_tab;
+static void * alloc_mark;
 static size_t tabsize, entsize, refsize;
 static size_t old_symcount;
 
@@ -348,7 +351,10 @@ cref_sort_array (const void *a1, const void *a2)
   const struct cref_hash_entry * const *p2 =
       (const struct cref_hash_entry * const *) a2;
 
-  return strcmp ((*p1)->demangled, (*p2)->demangled);
+  if (demangling)
+    return strcmp ((*p1)->demangled, (*p2)->demangled);
+  else
+    return strcmp ((*p1)->root.string, (*p2)->root.string);
 }
 
 /* Write out the cref table.  */
@@ -426,8 +432,16 @@ output_one_cref (FILE *fp, struct cref_hash_entry *h)
        }
     }
 
-  fprintf (fp, "%s ", h->demangled);
-  len = strlen (h->demangled) + 1;
+  if (demangling)
+    {
+      fprintf (fp, "%s ", h->demangled);
+      len = strlen (h->demangled) + 1;
+    }
+  else
+    {
+      fprintf (fp, "%s ", h->root.string);
+      len = strlen (h->root.string) + 1;
+    }
 
   for (r = h->refs; r != NULL; r = r->next)
     {