aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/objdump.c22
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. */