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