* elf32-sparc.c (elf32_sparc_relocate_section): Don't abort
authorAlan Modra <amodra@gmail.com>
Wed, 14 Apr 2004 09:50:07 +0000 (09:50 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 14 Apr 2004 09:50:07 +0000 (09:50 +0000)
when statically linking PIC code.
* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.

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

index c453657ab86c2e040d144558125e06545021f868..7aff007df50c9f30f262bb2dd82b627875710627 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-14  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf32-sparc.c (elf32_sparc_relocate_section): Don't abort
+       when statically linking PIC code.
+       * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
+
 2004-04-11  Thiemo Seufer  <seufer@csv.ica.uni-stuttgart.de>
 
        * config.bfd: Remove mips*-*-mach3* and mips*-dec-mach3* targets.
index 3016652678babd84bcc0e2abe8a394e734956f13..0f94f5f31bb70e8884f3f0bae72373b8ec3f003a 100644 (file)
@@ -2323,7 +2323,7 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section,
          if (h == NULL)
            break;
 
-         if (h->plt.offset == (bfd_vma) -1)
+         if (h->plt.offset == (bfd_vma) -1 || htab->splt == NULL)
            {
              /* We didn't make a PLT entry for this symbol.  This
                 happens when statically linking PIC code, or when
@@ -2331,9 +2331,6 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section,
              break;
            }
 
-         if (htab->splt == NULL)
-           abort ();
-
          relocation = (htab->splt->output_section->vma
                        + htab->splt->output_offset
                        + h->plt.offset);
index dd3e4962e2ffe7d6c0309f026012a0114899c28d..0b65380aae6bf05bdb8e12c4847d927fb29e542a 100644 (file)
@@ -2027,7 +2027,8 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
   else
     got_base = elf_hash_table (info)->hgot->root.u.def.value;
 
-  sgot = splt = sreloc = NULL;
+  sgot = sreloc = NULL;
+  splt = bfd_get_section_by_name (dynobj, ".plt");
 
   rel = relocs;
   relend = relocs + NUM_SHDR_ENTRIES (& elf_section_data (input_section)->rel_hdr);
@@ -2409,7 +2410,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              procedure linkage table.  */
          BFD_ASSERT (h != NULL);
 
-         if (h->plt.offset == (bfd_vma) -1)
+         if (h->plt.offset == (bfd_vma) -1 || splt == NULL)
            {
              /* We didn't make a PLT entry for this symbol.  This
                 happens when statically linking PIC code, or when
@@ -2417,12 +2418,6 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              goto do_default;
            }
 
-         if (splt == NULL)
-           {
-             splt = bfd_get_section_by_name (dynobj, ".plt");
-             BFD_ASSERT (splt != NULL);
-           }
-
          relocation = (splt->output_section->vma
                        + splt->output_offset
                        + sparc64_elf_plt_entry_offset (h->plt.offset));