bfd/
authorRichard Sandiford <rdsandiford@googlemail.com>
Mon, 14 Mar 2011 15:53:58 +0000 (15:53 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Mon, 14 Mar 2011 15:53:58 +0000 (15:53 +0000)
* elf32-arm.c (elf32_arm_check_relocs): Always assign a dynobj.
(elf32_arm_finish_dynamic_sections): Move sgot != NULL assertion
into the PLT block.

ld/
* emultempl/armelf.em (arm_elf_before_allocation): Check dynobj
instead of dynamic_sections_created.

bfd/ChangeLog
bfd/elf32-arm.c
ld/ChangeLog
ld/emultempl/armelf.em

index 198ed38..4811453 100644 (file)
@@ -1,5 +1,11 @@
 2011-03-14  Richard Sandiford  <richard.sandiford@linaro.org>
 
+       * elf32-arm.c (elf32_arm_check_relocs): Always assign a dynobj.
+       (elf32_arm_finish_dynamic_sections): Move sgot != NULL assertion
+       into the PLT block.
+
+2011-03-14  Richard Sandiford  <richard.sandiford@linaro.org>
+
        * elf32-arm.c (elf32_arm_check_relocs): Use call_reloc_p,
        may_need_local_target_p and may_become_dynamic_p to classify
        the relocation type.  Don't check info->symbolic or h->def_regular
index 76c0127..2636052 100644 (file)
@@ -11398,7 +11398,11 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
        return FALSE;
     }
 
-  dynobj = elf_hash_table (info)->dynobj;
+  if (htab->root.dynobj == NULL)
+    htab->root.dynobj = abfd;
+
+  dynobj = htab->root.dynobj;
+
   symtab_hdr = & elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
@@ -11544,13 +11548,9 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
          case R_ARM_GOTOFF32:
          case R_ARM_GOTPC:
-           if (htab->root.sgot == NULL)
-             {
-               if (htab->root.dynobj == NULL)
-                 htab->root.dynobj = abfd;
-               if (!create_got_section (htab->root.dynobj, info))
-                 return FALSE;
-             }
+           if (htab->root.sgot == NULL
+               && !create_got_section (htab->root.dynobj, info))
+             return FALSE;
            break;
 
          case R_ARM_PC24:
@@ -13132,7 +13132,6 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
   dynobj = elf_hash_table (info)->dynobj;
 
   sgot = htab->root.sgotplt;
-  BFD_ASSERT (htab->symbian_p || sgot != NULL);
   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -13142,6 +13141,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 
       splt = htab->root.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
+      BFD_ASSERT (htab->symbian_p || sgot != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
index cdc9198..7dd9abf 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-14  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * emultempl/armelf.em (arm_elf_before_allocation): Check dynobj
+       instead of dynamic_sections_created.
+
 2011-03-10  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        * plugin.c (get_symbols): Use wrapped lookup for undefined symbols.
index 6c4c78d..bfc57ca 100644 (file)
@@ -67,7 +67,7 @@ arm_elf_before_allocation (void)
 
   /* We should be able to set the size of the interworking stub section.  We
      can't do it until later if we have dynamic sections, though.  */
-  if (! elf_hash_table (&link_info)->dynamic_sections_created)
+  if (elf_hash_table (&link_info)->dynobj == NULL)
     {
       /* Here we rummage through the found bfds to collect glue information.  */
       LANG_FOR_EACH_INPUT_STATEMENT (is)