From e3e3703534b6277b9d60441a9c828b7deadfe603 Mon Sep 17 00:00:00 2001 From: Dan Mick Date: Wed, 26 Feb 2014 12:05:02 +0000 Subject: [PATCH] Resolve PR ld/16569 by emitting (and comparing) unmangled names, unless demangling has specifically been requested. --- ld/ChangeLog | 8 ++++++++ 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 + + 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 H.J. Lu 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 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) { -- 2.7.4