* objdump.c (compare_symbols): Sort symbols whose names start with
authorIan Lance Taylor <ian@airs.com>
Tue, 23 Apr 1996 16:58:18 +0000 (16:58 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 23 Apr 1996 16:58:18 +0000 (16:58 +0000)
  `.' after other symbols.  If no other decision can be made, sort
symbols by name.

binutils/ChangeLog
binutils/objdump.c

index de07afc..4467390 100644 (file)
@@ -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@.
index 782a265..7fbe135 100644 (file)
@@ -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.  */