diff options
author | Alan Modra <amodra@gmail.com> | 2005-12-27 03:45:30 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-12-27 03:45:30 +0000 |
commit | 185ef66d06b9b8f289712e6348993438f089c4f4 (patch) | |
tree | ed241b6169edf3aed03724888d77e213d3f9c7ca /bfd | |
parent | 44da2da10b10bc7e70095c3dc8737278c9a65149 (diff) | |
download | binutils-185ef66d06b9b8f289712e6348993438f089c4f4.zip binutils-185ef66d06b9b8f289712e6348993438f089c4f4.tar.gz binutils-185ef66d06b9b8f289712e6348993438f089c4f4.tar.bz2 |
* elf.c (bfd_section_from_shdr): Treat invalid reloc sections as
normal sections rather than returning false.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf.c | 13 |
2 files changed, 12 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 97db8cd..fc13901 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,10 @@ 2005-12-27 Alan Modra <amodra@bigpond.net.au> + * elf.c (bfd_section_from_shdr): Treat invalid reloc sections as + normal sections rather than returning false. + +2005-12-27 Alan Modra <amodra@bigpond.net.au> + * coff-h8300.c (h8300_reloc16_extra_cases): Use input section "output_offset" instead of link order "offset". * coff-h8500.c (extra_case): Likewise. @@ -2045,15 +2045,16 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) represent such a section, so at least for now, we don't try. We just present it as a normal section. We also can't use it as a reloc section if it points to the null - section. */ - if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF) + section, an invalid section, or another reloc section. */ + if (hdr->sh_link != elf_onesymtab (abfd) + || hdr->sh_info == SHN_UNDEF + || (hdr->sh_info >= SHN_LORESERVE && hdr->sh_info <= SHN_HIRESERVE) + || hdr->sh_info >= num_sec + || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL + || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA) return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); - /* Prevent endless recursion on broken objects. */ - if (elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL - || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA) - return FALSE; if (! bfd_section_from_shdr (abfd, hdr->sh_info)) return FALSE; target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info); |