aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Mick <dan.mick@inktank.com>2014-02-26 12:05:02 +0000
committerNick Clifton <nickc@redhat.com>2014-02-26 12:05:02 +0000
commite3e3703534b6277b9d60441a9c828b7deadfe603 (patch)
treec7837f37924560c475f3741ad25e92d59a10c549
parentd16461aeef555da47e358b0f81c75912e4ea07e2 (diff)
downloadgdb-e3e3703534b6277b9d60441a9c828b7deadfe603.zip
gdb-e3e3703534b6277b9d60441a9c828b7deadfe603.tar.gz
gdb-e3e3703534b6277b9d60441a9c828b7deadfe603.tar.bz2
Resolve PR ld/16569 by emitting (and comparing) unmangled names, unless
demangling has specifically been requested.
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/ldcref.c32
2 files changed, 31 insertions, 9 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 9930434..4a2fa1c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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>
diff --git a/ld/ldcref.c b/ld/ldcref.c
index 56b917d..10d57c5 100644
--- a/ld/ldcref.c
+++ b/ld/ldcref.c
@@ -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)
{