diff options
author | H.J. Lu <hjl@lucon.org> | 2005-12-13 15:34:28 +0000 |
---|---|---|
committer | H.J. Lu <hjl@lucon.org> | 2005-12-13 15:34:28 +0000 |
commit | db3bcf75cdd075c099029a2f61b14db378ae6874 (patch) | |
tree | 214ebb5ce9ed2f1f768819e46790ba8ff4dfd9c6 /bfd | |
parent | a1b0c413612ac5973b826cb78b0daa6a9c10dbaf (diff) | |
download | binutils-redhat-db3bcf75cdd075c099029a2f61b14db378ae6874.tar.gz |
2005-12-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/2008
* elf.c (_bfd_elf_setup_sections): Return FALSE if
elf_linked_to_section will be set to NULL.
* format.c (bfd_check_format_matches): Don't check the default
target twice.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 9 | ||||
-rw-r--r-- | bfd/elf.c | 17 | ||||
-rw-r--r-- | bfd/format.c | 4 |
3 files changed, 28 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f7ed00ac08..1cddc78450 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2005-12-13 H.J. Lu <hongjiu.lu@intel.com> + + PR ld/2008 + * elf.c (_bfd_elf_setup_sections): Return FALSE if + elf_linked_to_section will be set to NULL. + + * format.c (bfd_check_format_matches): Don't check the default + target twice. + 2005-12-13 Alan Modra <amodra@bigpond.net.au> * elf64-ppc.c (ppc64_elf_relocate_section): Force tail calls in @@ -654,8 +654,23 @@ _bfd_elf_setup_sections (bfd *abfd) } else { + asection *link; + this_hdr = elf_elfsections (abfd)[elfsec]; - elf_linked_to_section (s) = this_hdr->bfd_section; + + /* PR 1991, 2008: + Some strip/objcopy may leave an incorrect value in + sh_link. We don't want to proceed. */ + link = this_hdr->bfd_section; + if (link == NULL) + { + (*_bfd_error_handler) + (_("%B: sh_link [%d] in section `%A' is incorrect"), + s->owner, s, elfsec); + result = FALSE; + } + + elf_linked_to_section (s) = link; } } } diff --git a/bfd/format.c b/bfd/format.c index ba9ca9f609..6a34dd2bea 100644 --- a/bfd/format.c +++ b/bfd/format.c @@ -217,7 +217,9 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) const bfd_target *temp; bfd_error_type err; - if (*target == &binary_vec) + /* Don't check the default target twice. */ + if (*target == &binary_vec + || (!abfd->target_defaulted && *target == save_targ)) continue; abfd->xvec = *target; /* Change BFD's target temporarily. */ |