aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfcode.h
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-06-12 17:56:26 +0000
committerMark Mitchell <mark@codesourcery.com>1999-06-12 17:56:26 +0000
commit57e21befb98e8ad0b2c6dda814869145a8bcd60b (patch)
treeee5a479109b5326a711fe7146bddfd2a242d4d9b /bfd/elfcode.h
parentb9e57a387a6bdc15fd8bf477dc4d45131f0307d6 (diff)
downloadfsf-binutils-gdb-57e21befb98e8ad0b2c6dda814869145a8bcd60b.zip
fsf-binutils-gdb-57e21befb98e8ad0b2c6dda814869145a8bcd60b.tar.gz
fsf-binutils-gdb-57e21befb98e8ad0b2c6dda814869145a8bcd60b.tar.bz2
* elfcode.h (elf_slurp_reloc_table_from_section): Don't assume
asect->reloc_count is valid.
Diffstat (limited to 'bfd/elfcode.h')
-rw-r--r--bfd/elfcode.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index a13bda6..29a1943 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -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;