* elf32-ppc.c (ppc_elf_finish_dynamic_symbol): Don't make PLT
authorGeoffrey Keating <geoffk@geoffk.org>
Sat, 14 Oct 2000 23:30:12 +0000 (23:30 +0000)
committerGeoffrey Keating <geoffk@geoffk.org>
Sat, 14 Oct 2000 23:30:12 +0000 (23:30 +0000)
entries that could serve as a definition for a weak symbol.

bfd/ChangeLog
bfd/elf32-ppc.c

index 3e62721a966a000ddc6f0cb889cf77dcf78d2e6b..101c34f3d19a918c0e3374b7be6447904e887711 100644 (file)
@@ -1,3 +1,8 @@
+2000-10-14  Geoffrey Keating  <geoffk@shoggoth.cygnus.com>
+
+       * elf32-ppc.c (ppc_elf_finish_dynamic_symbol): Don't make PLT
+       entries that could serve as a definition for a weak symbol.
+
 2000-10-13  Ulf Carlsson  <ulfc@engr.sgi.com>
 
        From  Ralf Baechle  <ralf@gnu.org>
index 3c7999b760c7ea74e398f1cf3a1216ed4e12c6a5..c4d352becbd796b4c0840da9165582f6a88a458c 100644 (file)
@@ -1715,7 +1715,8 @@ ppc_elf_adjust_dynamic_symbol (info, h)
 
             2. We know for certain that a symbol is defined in
             this object, because this object is the application,
-            is linked with -Bsymbolic, or because the symbol is local.
+            is linked with -Bsymbolic, the symbol is local,
+            or because the symbol is protected or hidden.
 
             3. GC has rendered the entry unused.
             Note, however, that in an executable all references to the
@@ -2675,6 +2676,13 @@ ppc_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
          /* Mark the symbol as undefined, rather than as defined in
             the .plt section.  Leave the value alone.  */
          sym->st_shndx = SHN_UNDEF;
+         /* If the symbol is weak, we do need to clear the value.
+            Otherwise, the PLT entry would provide a definition for
+            the symbol even if the symbol wasn't defined anywhere,
+            and so the symbol would never be NULL.  */
+         if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) 
+             == 0)
+           sym->st_value = 0;
        }
     }