* elflink.h (elf_fix_symbol_flags): For non-default visibilities,
authorHans-Peter Nilsson <hp@axis.com>
Mon, 9 Apr 2001 03:24:32 +0000 (03:24 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 9 Apr 2001 03:24:32 +0000 (03:24 +0000)
only hide symbols marked STV_INTERNAL or STV_HIDDEN.

bfd/ChangeLog
bfd/elflink.h

index f26eacf..f16feaa 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-09  Hans-Peter Nilsson  <hp@axis.com>
+
+       * elflink.h (elf_fix_symbol_flags): For non-default visibilities,
+       only hide symbols marked STV_INTERNAL or STV_HIDDEN.
+
 2001-04-05  Steven J. Hill  <sjhill@cotw.com>
 
        * config.bfd (mips*el*-*-linux-gnu*): Use traditional little
index 9f15e9a..554713b 100644 (file)
@@ -3515,12 +3515,16 @@ elf_fix_symbol_flags (h, eif)
   /* If -Bsymbolic was used (which means to bind references to global
      symbols to the definition within the shared object), and this
      symbol was defined in a regular object, then it actually doesn't
-     need a PLT entry.  Likewise, if the symbol has any kind of
-     visibility (internal, hidden, or protected), it doesn't need a
-     PLT.  */
+     need a PLT entry, and we can accomplish that by forcing it local.
+     Likewise, if the symbol has hidden or internal visibility.
+     FIXME: It might be that we also do not need a PLT for other
+     non-hidden visibilities, but we would have to tell that to the
+     backend specifically; we can't just clear PLT-related data here.  */
   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
       && eif->info->shared
-      && (eif->info->symbolic || ELF_ST_VISIBILITY (h->other))
+      && (eif->info->symbolic
+         || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
+         || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
     {
       struct elf_backend_data *bed;