SOURCES: binutils-elfcode.h.patch (NEW) - fix PR ld/2607 (linker d...
pluto
pluto at pld-linux.org
Wed May 10 15:54:57 CEST 2006
Author: pluto Date: Wed May 10 13:54:57 2006 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- fix PR ld/2607 (linker doesn't recognize an ELF library).
---- Files affected:
SOURCES:
binutils-elfcode.h.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/binutils-elfcode.h.patch
diff -u /dev/null SOURCES/binutils-elfcode.h.patch:1.1
--- /dev/null Wed May 10 15:54:57 2006
+++ SOURCES/binutils-elfcode.h.patch Wed May 10 15:54:52 2006
@@ -0,0 +1,59 @@
+--- binutils-2.16.91.0.7/bfd/elfcode.h.orig 2005-12-20 23:43:55.000000000 +0100
++++ binutils-2.16.91.0.7/bfd/elfcode.h 2006-05-10 15:43:08.822548000 +0200
+@@ -458,6 +458,25 @@
+ && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3));
+ }
+
++/* Determines if a given section index is valid. */
++
++static inline bfd_boolean
++valid_section_index_p (unsigned index, unsigned num_sections)
++{
++ /* Note: We allow SHN_UNDEF as a valid section index. */
++ if (index < SHN_LORESERVE || index > SHN_HIRESERVE)
++ return index < num_sections;
++
++ /* We disallow the use of reserved indcies, except for those
++ with OS or Application specific meaning. The test make use
++ of the knowledge that:
++ SHN_LORESERVE == SHN_LOPROC
++ and
++ SHN_HIPROC == SHN_LOOS - 1 */
++ /* XXX - Should we allow SHN_XINDEX as a valid index here ? */
++ return (index >= SHN_LOPROC && index <= SHN_HIOS);
++}
++
+ /* Check to see if the file associated with ABFD matches the target vector
+ that ABFD points to.
+
+@@ -711,17 +730,13 @@
+ elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
+
+ /* Sanity check sh_link and sh_info. */
+- if (i_shdrp[shindex].sh_link >= num_sec
+- || (i_shdrp[shindex].sh_link >= SHN_LORESERVE
+- && i_shdrp[shindex].sh_link <= SHN_HIRESERVE))
++ if (! valid_section_index_p (i_shdrp[shindex].sh_link, num_sec))
+ goto got_wrong_format_error;
+
+ if (((i_shdrp[shindex].sh_flags & SHF_INFO_LINK)
+ || i_shdrp[shindex].sh_type == SHT_RELA
+ || i_shdrp[shindex].sh_type == SHT_REL)
+- && (i_shdrp[shindex].sh_info >= num_sec
+- || (i_shdrp[shindex].sh_info >= SHN_LORESERVE
+- && i_shdrp[shindex].sh_info <= SHN_HIRESERVE)))
++ && ! valid_section_index_p (i_shdrp[shindex].sh_info, num_sec))
+ goto got_wrong_format_error;
+
+ /* If the section is loaded, but not page aligned, clear
+@@ -739,9 +754,7 @@
+ /* A further sanity check. */
+ if (i_ehdrp->e_shnum != 0)
+ {
+- if (i_ehdrp->e_shstrndx >= elf_numsections (abfd)
+- || (i_ehdrp->e_shstrndx >= SHN_LORESERVE
+- && i_ehdrp->e_shstrndx <= SHN_HIRESERVE))
++ if (! valid_section_index_p (i_ehdrp->e_shstrndx, elf_numsections (abfd)))
+ goto got_wrong_format_error;
+ }
+ else if (i_ehdrp->e_shstrndx != 0)
================================================================
More information about the pld-cvs-commit
mailing list