summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2005-12-13 15:34:28 +0000
committerH.J. Lu <hjl@lucon.org>2005-12-13 15:34:28 +0000
commitdb3bcf75cdd075c099029a2f61b14db378ae6874 (patch)
tree214ebb5ce9ed2f1f768819e46790ba8ff4dfd9c6 /bfd
parenta1b0c413612ac5973b826cb78b0daa6a9c10dbaf (diff)
downloadbinutils-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/ChangeLog9
-rw-r--r--bfd/elf.c17
-rw-r--r--bfd/format.c4
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
diff --git a/bfd/elf.c b/bfd/elf.c
index 58a90596d3..019f72a030 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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. */