OSDN Git Service

* elf64-ppc.c (compare_symbols): Prefer strong dynamic global
authorAlan Modra <amodra@bigpond.net.au>
Tue, 23 May 2006 01:36:07 +0000 (01:36 +0000)
committerAlan Modra <amodra@bigpond.net.au>
Tue, 23 May 2006 01:36:07 +0000 (01:36 +0000)
function syms over other syms.

bfd/ChangeLog
bfd/elf64-ppc.c

index 76e740c..b308c88 100644 (file)
@@ -1,3 +1,8 @@
+2006-05-23  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (compare_symbols): Prefer strong dynamic global
+       function syms over other syms.
+
 2006-05-22  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * elflink.c (_bfd_elf_add_dynamic_entry): Remove DT_TEXTREL
index 1697d53..b1ec942 100644 (file)
@@ -2626,6 +2626,32 @@ compare_symbols (const void *ap, const void *bp)
   if (a->value + a->section->vma > b->value + b->section->vma)
     return 1;
 
+  /* For syms with the same value, prefer strong dynamic global function
+     syms over other syms.  */
+  if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
+    return -1;
+
+  if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
+    return 1;
+
+  if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
+    return -1;
+
+  if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
+    return 1;
+
+  if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
+    return -1;
+
+  if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
+    return 1;
+
+  if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
+    return -1;
+
+  if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
+    return 1;
+
   return 0;
 }