OSDN Git Service

2000-04-27 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl@lucon.org>
Mon, 30 Apr 2001 16:13:26 +0000 (16:13 +0000)
committerH.J. Lu <hjl@lucon.org>
Mon, 30 Apr 2001 16:13:26 +0000 (16:13 +0000)
* elf.c (_bfd_elf_link_hash_hide_symbol): Set dynindx to -1
only for ELF_LINK_FORCED_LOCAL.
* elf32-hppa.c (elf32_hppa_hide_symbol): Likewise.
* elf32-mips.c (_bfd_mips_elf_hide_symbol): Likewise.
* elfxx-ia64.c (elfNN_ia64_hash_hide_symbol): Likewise.

* elflink.h (elf_fix_symbol_flags): Set ELF_LINK_FORCED_LOCAL
if the symbol has hidden or internal visibility.

bfd/ChangeLog
bfd/elf.c
bfd/elf32-hppa.c
bfd/elf32-mips.c
bfd/elflink.h
bfd/elfxx-ia64.c

index eebb8fa..8e6ab54 100644 (file)
@@ -1,3 +1,14 @@
+2001-04-30  H.J. Lu  <hjl@gnu.org>
+
+       * elf.c (_bfd_elf_link_hash_hide_symbol): Set dynindx to -1
+       only for ELF_LINK_FORCED_LOCAL.
+       * elf32-hppa.c (elf32_hppa_hide_symbol): Likewise.
+       * elf32-mips.c (_bfd_mips_elf_hide_symbol): Likewise.
+       * elfxx-ia64.c (elfNN_ia64_hash_hide_symbol): Likewise.
+
+       * elflink.h (elf_fix_symbol_flags): Set ELF_LINK_FORCED_LOCAL
+       if the symbol has hidden or internal visibility.
+
 2001-04-30  Alan Modra  <amodra@one.net.au>
 
        * elf32-hppa.c (final_link_relocate): Branch to .+8 for
index 26ce9d3..602ebcd 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1014,8 +1014,9 @@ _bfd_elf_link_hash_hide_symbol (info, h)
      struct elf_link_hash_entry *h;
 {
   h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
-  h->dynindx = -1;
   h->plt.offset = (bfd_vma) -1;
+  if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
+    h->dynindx = -1;
 }
 
 /* Initialize an ELF linker hash table.  */
index fdcb3b4..0224215 100644 (file)
@@ -1863,7 +1863,8 @@ elf32_hppa_hide_symbol (info, h)
      struct bfd_link_info *info ATTRIBUTE_UNUSED;
      struct elf_link_hash_entry *h;
 {
-  h->dynindx = -1;
+  if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
+    h->dynindx = -1;
   if (! ((struct elf32_hppa_link_hash_entry *) h)->plabel)
     {
       h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
index efbcbfa..065e7d7 100644 (file)
@@ -4002,7 +4002,8 @@ _bfd_mips_elf_hide_symbol (info, h)
 
   h->root.elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
   h->root.plt.offset = (bfd_vma) -1;
-  h->root.dynindx = -1;
+  if ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
+    h->root.dynindx = -1;
 
   /* FIXME: Do we allocate too much GOT space here?  */
   g->local_gotno++;
index d175223..4973ae3 100644 (file)
@@ -3541,6 +3541,9 @@ elf_fix_symbol_flags (h, eif)
     {
       struct elf_backend_data *bed;
       bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
+      if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
+         || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
+       h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
       (*bed->elf_backend_hide_symbol) (eif->info, h);
     }
 
index 77d2022..8d80e6e 100644 (file)
@@ -1524,7 +1524,8 @@ elfNN_ia64_hash_hide_symbol (info, xh)
   h = (struct elfNN_ia64_link_hash_entry *)xh;
 
   h->root.elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
-  h->root.dynindx = -1;
+  if ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
+    h->root.dynindx = -1;
 
   for (dyn_i = h->info; dyn_i; dyn_i = dyn_i->next)
     dyn_i->want_plt2 = 0;