aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf.c3
-rw-r--r--bfd/elfcode.h5
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/readelf.c8
5 files changed, 27 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 860297b..3594e25 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-28 Nick Clifton <nickc@redhat.com>
+
+ PR 10478: Accepting Solaris binaries.
+ * elf.c (bfd_section_from_shdr): Allow SHN_BEFORE and SHN_AFTER
+ section link values in x86 binaries.
+ * elfcode.h (elf_object_p): Likewise.
+
2009-09-28 Philippe De Muyter <phdm@macqel.be>
* elf32-m68k.c (elf_m68k_final_write_processing): New function.
diff --git a/bfd/elf.c b/bfd/elf.c
index e7116d8..4a32929 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1518,10 +1518,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
return FALSE;
if (hdr->sh_link > elf_numsections (abfd))
{
- /* PR 10478: Accept sparc binaries with a sh_link
+ /* PR 10478: Accept Solaris binaries with a sh_link
field set to SHN_BEFORE or SHN_AFTER. */
switch (bfd_get_arch (abfd))
{
+ case bfd_arch_i386:
case bfd_arch_sparc:
if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
|| hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index f539119..ecdc2de 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -761,10 +761,13 @@ elf_object_p (bfd *abfd)
/* Sanity check sh_link and sh_info. */
if (i_shdrp[shindex].sh_link >= num_sec)
{
- /* PR 10478: Accept sparc binaries with a sh_link
+ /* PR 10478: Accept Solaris binaries with a sh_link
field set to SHN_BEFORE or SHN_AFTER. */
switch (ebd->elf_machine_code)
{
+ case EM_386:
+ case EM_486:
+ case EM_X86_64:
case EM_OLD_SPARCV9:
case EM_SPARC32PLUS:
case EM_SPARCV9:
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 04e553f..b059f91 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-28 Nick Clifton <nickc@redhat.com>
+
+ PR 10478
+ * readelf.c (get_elf_section_flags): Allow SHN_BEFORE and
+ SHN_AFTER section link values in x86 binaries.
+ (process_section_headers): Likewise.
+
2009-09-25 Dimitry Gorbachev <d.g.gorbachev@gmail.com>
PR 10656
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 9c09823..a57b5ad 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -3971,6 +3971,9 @@ get_elf_section_flags (bfd_vma sh_flags)
#endif
break;
+ case EM_386:
+ case EM_486:
+ case EM_X86_64:
case EM_OLD_SPARCV9:
case EM_SPARC32PLUS:
case EM_SPARCV9:
@@ -4384,9 +4387,12 @@ process_section_headers (FILE * file)
{
link_too_big = "";
/* The sh_link value is out of range. Normally this indicates
- an error but it can have special values in SPARC binaries. */
+ an error but it can have special values in Solaris binaries. */
switch (elf_header.e_machine)
{
+ case EM_386:
+ case EM_486:
+ case EM_X86_64:
case EM_OLD_SPARCV9:
case EM_SPARC32PLUS:
case EM_SPARCV9: