diff options
-rw-r--r-- | binutils/ChangeLog | 6 | ||||
-rw-r--r-- | binutils/objdump.c | 22 |
2 files changed, 25 insertions, 3 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index de07afc..4467390 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +Tue Apr 23 12:56:11 1996 Ian Lance Taylor <ian@cygnus.com> + + * objdump.c (compare_symbols): Sort symbols whose names start with + `.' after other symbols. If no other decision can be made, sort + symbols by name. + Thu Apr 18 16:02:11 1996 Ian Lance Taylor <ian@cygnus.com> * dep-in.sed: Substitute $(BFDDIR) for @BFDDIR@. diff --git a/binutils/objdump.c b/binutils/objdump.c index 782a265..7fbe135 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -432,8 +432,8 @@ compare_symbols (ap, bp) if (! af && bf) return -1; - /* Finally, try to sort global symbols before local symbols before - debugging symbols. */ + /* Try to sort global symbols before local symbols before debugging + symbols. */ aflags = a->flags; bflags = b->flags; @@ -452,8 +452,24 @@ compare_symbols (ap, bp) else return -1; } + if ((aflags & BSF_GLOBAL) != (bflags & BSF_GLOBAL)) + { + if ((aflags & BSF_GLOBAL) != 0) + return -1; + else + return 1; + } - return 0; + /* Symbols that start with '.' might be section names, so sort them + after symbols that don't start with '.'. */ + if (an[0] == '.' && bn[0] != '.') + return 1; + if (an[0] != '.' && bn[0] == '.') + return -1; + + /* Finally, if we can't distinguish them in any other way, try to + get consistent results by sorting the symbols by name. */ + return strcmp (an, bn); } /* Sort relocs into address order. */ |