* elfcode.h (elf_slurp_reloc_table_from_section): Don't assume
authorMark Mitchell <mark@codesourcery.com>
Sat, 12 Jun 1999 17:56:26 +0000 (17:56 +0000)
committerMark Mitchell <mark@codesourcery.com>
Sat, 12 Jun 1999 17:56:26 +0000 (17:56 +0000)
asect->reloc_count is valid.

bfd/ChangeLog
bfd/elfcode.h

index 7670efced690ac550ccf1c4ca449fcd637e0be10..d77860903b90ff557e085f5d61c06313a98af51c 100644 (file)
@@ -1,3 +1,8 @@
+1999-06-12  Mark Mitchell  <mark@codesourcery.com>
+
+       * elfcode.h (elf_slurp_reloc_table_from_section): Don't assume
+       asect->reloc_count is valid.
+
 1999-06-12  Ian Lance Taylor  <ian@zembu.com>
 
        * elf32-mips.c (mips_elf32_section_processing): Permit a
index a13bda604711a97fb461f6ab29499fa0f45e70cc..29a1943838644cfb503d559110058741088c5895 100644 (file)
@@ -1335,16 +1335,22 @@ elf_slurp_reloc_table (abfd, asect, symbols, dynamic)
     }
   else
     {
+      /* Note that ASECT->RELOC_COUNT tends not to be accurate in this
+        case because relocations against this section may use the
+        dynamic symbol table, and in that case bfd_section_from_shdr
+        in elf.c does not update the RELOC_COUNT.  */
       if (asect->_raw_size == 0)
        return true;
 
       rel_hdr = &d->this_hdr;
       reloc_count = rel_hdr->sh_size / rel_hdr->sh_entsize;
       rel_hdr2 = NULL;
+      reloc_count2 = 0;
     }
 
-  relents = (arelent *) bfd_alloc (abfd, 
-                                  asect->reloc_count * sizeof (arelent));
+  relents = ((arelent *) 
+            bfd_alloc (abfd, 
+                       (reloc_count + reloc_count2) * sizeof (arelent)));
   if (relents == NULL)
     return false;