diff options
author | Dan Mick <dan.mick@inktank.com> | 2014-02-26 12:05:02 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2014-02-26 12:05:02 +0000 |
commit | e3e3703534b6277b9d60441a9c828b7deadfe603 (patch) | |
tree | c7837f37924560c475f3741ad25e92d59a10c549 | |
parent | d16461aeef555da47e358b0f81c75912e4ea07e2 (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | ld/ldcref.c | 32 |
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) { |