2008-03-02 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 2 Mar 2008 22:26:09 +0000 (22:26 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 2 Mar 2008 22:26:09 +0000 (22:26 +0000)
PR ld/5789
* elflink.c (_bfd_elf_symbol_refs_local_p): Always return true
for hidden and local symbols.

bfd/ChangeLog
bfd/elflink.c

index ae142f1..b534ee8 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/5789
+       * elflink.c (_bfd_elf_symbol_refs_local_p): Always return true
+       for hidden and local symbols.
+
 2008-03-03  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-ppc.c (allocate_dynrelocs): Discard relocs on
index 3a00a51..5139799 100644 (file)
@@ -2789,6 +2789,11 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
   if (h == NULL)
     return TRUE;
 
+  /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
+  if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
+      || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
+    return TRUE;
+
   /* Common symbols that become definitions don't get the DEF_REGULAR
      flag set, so test it first, and don't bail out.  */
   if (ELF_COMMON_DEF_P (h))
@@ -2817,10 +2822,6 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
     return FALSE;
 
-  /* However, STV_HIDDEN or STV_INTERNAL ones must be local.  */
-  if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED)
-    return TRUE;
-
   hash_table = elf_hash_table (info);
   if (!is_elf_hash_table (hash_table))
     return TRUE;