Thu Mar 19 11:32:15 1998 Michael Snyder (msnyder@cleaver.cygnus.com)

* minsyms.c (compare_minimal_symbols): If addresses are identical,
        then compare on names.  Sorted list should have symbols with
        identical addresses AND names adjacent, so dups can be discarded.
This commit is contained in:
Michael Snyder 1998-03-19 19:35:18 +00:00
parent 578491a2b1
commit f4f7d59421
2 changed files with 22 additions and 5 deletions

View File

@ -1,3 +1,9 @@
Thu Mar 19 11:32:15 1998 Michael Snyder (msnyder@cleaver.cygnus.com)
* minsyms.c (compare_minimal_symbols): If addresses are identical,
then compare on names. Sorted list should have symbols with
identical addresses AND names adjacent, so dups can be discarded.
Wed Mar 18 12:50:17 1998 Jeff Law (law@cygnus.com)
* stabsread.c (define_symbol): Don't look for ',' as a LRS

View File

@ -585,7 +585,8 @@ prim_record_minimal_symbol_and_info (name, address, ms_type, info, section,
}
/* Compare two minimal symbols by address and return a signed result based
on unsigned comparisons, so that we sort into unsigned numeric order. */
on unsigned comparisons, so that we sort into unsigned numeric order.
Within groups with the same address, sort by name. */
static int
compare_minimal_symbols (fn1p, fn2p)
@ -600,15 +601,25 @@ compare_minimal_symbols (fn1p, fn2p)
if (SYMBOL_VALUE_ADDRESS (fn1) < SYMBOL_VALUE_ADDRESS (fn2))
{
return (-1);
return (-1); /* addr 1 is less than addr 2 */
}
else if (SYMBOL_VALUE_ADDRESS (fn1) > SYMBOL_VALUE_ADDRESS (fn2))
{
return (1);
return (1); /* addr 1 is greater than addr 2 */
}
else
else /* addrs are equal: sort by name */
{
return (0);
char *name1 = SYMBOL_NAME (fn1);
char *name2 = SYMBOL_NAME (fn2);
if (name1 && name2) /* both have names */
return strcmp (name1, name2);
else if (name2)
return 1; /* fn1 has no name, so it is "less" */
else if (name1) /* fn2 has no name, so it is "less" */
return -1;
else
return (0); /* neither has a name, so they're equal. */
}
}