Resolve PR ld/16569 by emitting (and comparing) unmangled names, unless
demangling has specifically been requested.
This commit is contained in:
parent
d16461aeef
commit
e3e3703534
|
@ -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>
|
||||
|
||||
|
|
32
ld/ldcref.c
32
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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue