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)
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to