* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Don't make PLT
authorJakub Jelinek <jakub@redhat.com>
Mon, 19 Feb 2001 22:35:47 +0000 (22:35 +0000)
committerJakub Jelinek <jakub@redhat.com>
Mon, 19 Feb 2001 22:35:47 +0000 (22:35 +0000)
entries that could serve as a definition for a weak symbol.
* elf64-sparc.c (sparc64_elf_finish_dynamic_symbol): Likewise.

bfd/ChangeLog
bfd/elf32-sparc.c
bfd/elf64-sparc.c

index 19aabe35d6946f6658732210d594a59dbdf2acea..1b74b5cb0f979b960f4ef008dfff18ad7378b879 100644 (file)
@@ -1,3 +1,9 @@
+2001-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Don't make PLT
+       entries that could serve as a definition for a weak symbol.
+       * elf64-sparc.c (sparc64_elf_finish_dynamic_symbol): Likewise.
+
 2001-02-18  David O'Brien  <obrien@FreeBSD>
 
        * configure.in: Recognize FreeBSD/arm, FreeBSD/PowerPC, and treat
index e892e9d938d555537b145844445b09bbcf060cd2..8b64f199cde20f892199d5dafdf4eddb3d9dac91 100644 (file)
@@ -1759,6 +1759,13 @@ elf32_sparc_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;
        }
     }
 
index 77fc7e269f3042c0d587bf290db58fe26feab0eb..18b6b751547644f5645c3527aa3bccb93ed5cb7f 100644 (file)
@@ -2709,6 +2709,13 @@ sparc64_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;
        }
     }