OSDN Git Service

* elf32-ppc.c (allocate_dynrelocs): Ignore dyn_relocs when
authoramodra <amodra>
Tue, 12 Aug 2008 13:12:47 +0000 (13:12 +0000)
committeramodra <amodra>
Tue, 12 Aug 2008 13:12:47 +0000 (13:12 +0000)
!dynamic_sections_created.  Don't make symbols with got
references dynamic if !dynamic_sections_created.
* elf64-ppc.c (allocate_dynrelocs): Likewise.  Alloc dynamic
relocs on undefined symbols.
(ppc64_elf_relocate_section): Allow dynamic relocs on
undefined symbols.

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

index 4d8b0c6..4e2baac 100644 (file)
@@ -1,3 +1,13 @@
+2008-08-12  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf32-ppc.c (allocate_dynrelocs): Ignore dyn_relocs when
+       !dynamic_sections_created.  Don't make symbols with got
+       references dynamic if !dynamic_sections_created.
+       * elf64-ppc.c (allocate_dynrelocs): Likewise.  Alloc dynamic
+       relocs on undefined symbols.
+       (ppc64_elf_relocate_section): Allow dynamic relocs on
+       undefined symbols.
+
 2008-08-11  Alan Modra  <amodra@bigpond.net.au>
 
        * elf64-ppc.c (toc_adjusting_stub_needed): Any call via the plt
index a93a706..84e72b8 100644 (file)
@@ -4993,7 +4993,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
     {
       /* Make sure this symbol is output as a dynamic symbol.  */
       if (eh->elf.dynindx == -1
-         && !eh->elf.forced_local)
+         && !eh->elf.forced_local
+         && htab->elf.dynamic_sections_created)
        {
          if (!bfd_elf_link_record_dynamic_symbol (info, &eh->elf))
            return FALSE;
@@ -5041,7 +5042,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
   else
     eh->elf.got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
+  if (eh->dyn_relocs == NULL
+      || !htab->elf.dynamic_sections_created)
     return TRUE;
 
   /* In the shared -Bsymbolic case, discard space allocated for
index 3ee3f69..86fe3c3 100644 (file)
@@ -7891,7 +7891,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
           Undefined weak syms won't yet be marked as dynamic,
           nor will all TLS symbols.  */
        if (h->dynindx == -1
-           && !h->forced_local)
+           && !h->forced_local
+           && htab->elf.dynamic_sections_created)
          {
            if (! bfd_elf_link_record_dynamic_symbol (info, h))
              return FALSE;
@@ -7925,7 +7926,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
     else
       gent->got.offset = (bfd_vma) -1;
 
-  if (eh->dyn_relocs == NULL)
+  if (eh->dyn_relocs == NULL
+      || !htab->elf.dynamic_sections_created)
     return TRUE;
 
   /* In the shared -Bsymbolic case, discard space allocated for
@@ -7982,7 +7984,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
         dynamic.  */
 
       if (!h->non_got_ref
-         && h->def_dynamic
          && !h->def_regular)
        {
          /* Make sure this symbol is output as a dynamic symbol.
@@ -11251,7 +11252,6 @@ ppc64_elf_relocate_section (bfd *output_bfd,
                  && h != NULL
                  && h->elf.dynindx != -1
                  && !h->elf.non_got_ref
-                 && h->elf.def_dynamic
                  && !h->elf.def_regular))
            {
              Elf_Internal_Rela outrel;