2006-04-20 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 21 Apr 2006 03:42:47 +0000 (03:42 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 21 Apr 2006 03:42:47 +0000 (03:42 +0000)
PR ld/2537
* elf.c (bfd_section_from_shdr): Allow sections reserved for
applications. Issue an error on sections we don't know how
to handle.

bfd/ChangeLog
bfd/elf.c

index 1ea6061fc8bfeeb3a2be736611ea3c9411f810ec..d1b48ffec4a69624044f4813adf8e782189ed1b6 100644 (file)
@@ -1,3 +1,10 @@
+2006-04-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/2537
+       * elf.c (bfd_section_from_shdr): Allow sections reserved for
+       applications. Issue an error on sections we don't know how
+       to handle.
+
 2006-04-19  Alan Modra  <amodra@bigpond.net.au>
 
        * Makefile.am: Run "make dep-am".
index 9e48f66e90fa22596bcd660e1a025832ed2233e7..b1d3a9bfdbf2cc1d9af8c2a8d4b4eac69acb23ee 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2159,8 +2159,43 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 
     default:
       /* Check for any processor-specific section types.  */
-      return bed->elf_backend_section_from_shdr (abfd, hdr, name,
-                                                shindex);
+      if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
+       return TRUE;
+
+      if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
+       {
+         if ((hdr->sh_flags & SHF_ALLOC) != 0)
+           /* FIXME: How to properly handle allocated section reserved
+              for applications?  */
+           (*_bfd_error_handler)
+             (_("%B: don't know how to handle allocated, application "
+                "specific section `%s' [0x%8x]"),
+              abfd, name, hdr->sh_type);
+         else
+           /* Allow sections reserved for applications.  */
+           return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
+                                                   shindex);
+       }
+      else if (hdr->sh_type >= SHT_LOPROC
+              && hdr->sh_type <= SHT_HIPROC)
+       /* FIXME: We should handle this section.  */
+       (*_bfd_error_handler)
+         (_("%B: don't know how to handle processor specific section "
+            "`%s' [0x%8x]"),
+          abfd, name, hdr->sh_type);
+      else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
+       /* FIXME: We should handle this section.  */
+       (*_bfd_error_handler)
+         (_("%B: don't know how to handle OS specific section "
+            "`%s' [0x%8x]"),
+          abfd, name, hdr->sh_type);
+      else
+       /* FIXME: We should handle this section.  */
+       (*_bfd_error_handler)
+         (_("%B: don't know how to handle section `%s' [0x%8x]"),
+          abfd, name, hdr->sh_type);
+
+      return FALSE;
     }
 
   return TRUE;