Resolve PR ld/16569 by emitting (and comparing) unmangled names, unless

demangling has specifically been requested.
This commit is contained in:
Dan Mick 2014-02-26 12:05:02 +00:00 committed by Nick Clifton
parent d16461aeef
commit e3e3703534
2 changed files with 31 additions and 9 deletions

View 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>

View 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)
{