* elf32-ppc.c (allocate_dynrelocs): Create dynsym for undef weak
authorJakub Jelinek <jakub@redhat.com>
Fri, 20 Feb 2004 17:36:36 +0000 (17:36 +0000)
committerJakub Jelinek <jakub@redhat.com>
Fri, 20 Feb 2004 17:36:36 +0000 (17:36 +0000)
symbols used in PIE relocs.

bfd/ChangeLog
bfd/elf32-ppc.c

index f820b9a07f36398491fa5374eaeec92e263b9959..6ce3246583392fe433d51a6bd54f418c53679a61 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-20  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf32-ppc.c (allocate_dynrelocs): Create dynsym for undef weak
+       symbols used in PIE relocs.
+
 2004-02-19  Jakub Jelinek  <jakub@redhat.com>
 
        * elf32-sparc.c (elf32_sparc_finish_dynamic_sections): Clear
index 4467eec5d975aff45d6a270bcbd325a4abb35df8..8bd7115bf9019d0320aadd5d7236a68b357a7e15 100644 (file)
@@ -3189,6 +3189,18 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
       if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
          && h->root.type == bfd_link_hash_undefweak)
        eh->dyn_relocs = NULL;
+
+      /* Make sure undefined weak symbols are output as a dynamic symbol
+        in PIEs.  */
+      if (info->pie
+         && eh->dyn_relocs != NULL
+         && h->dynindx == -1
+         && h->root.type == bfd_link_hash_undefweak
+         && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
+       {
+         if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+           return FALSE;
+       }
     }
   else if (ELIMINATE_COPY_RELOCS)
     {