This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: ld/2411: ELF linker fails to create executable with more than 64k sections


The ELF gABI doesn't support more than 64k sections in DSO and
executable when there are dynamic symbols. This patch checks that.


H.J.
---
2006-03-02  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/2411
	* elflink.c (map_sections_to_segments): Check if the number
	of output sections are allowed.
	(assign_file_positions_for_segments): Updated.

--- bfd/elf.c.64k	2006-03-01 06:19:54.000000000 -0800
+++ bfd/elf.c	2006-03-02 15:17:19.000000000 -0800
@@ -3585,7 +3585,7 @@ _bfd_elf_make_dynamic_segment (bfd *abfd
 /* Set up a mapping from BFD sections to program segments.  */
 
 static bfd_boolean
-map_sections_to_segments (bfd *abfd)
+map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
 {
   asection **sections = NULL;
   asection *s;
@@ -3612,6 +3612,18 @@ map_sections_to_segments (bfd *abfd)
   if (bfd_count_sections (abfd) == 0)
     return TRUE;
 
+  if (elf_hash_table (info)->dynsymcount != 0
+      && bfd_count_sections (abfd) >= SHN_LORESERVE)
+    {
+      /* The gABI doesn't support dynamic symbols and more than 64K
+         output sections at the same time.  */
+      (*_bfd_error_handler)
+	(_("%B: Too many sections: %d (< %d)"),
+	 abfd, bfd_count_sections (abfd), SHN_LORESERVE);
+      bfd_set_error (bfd_error_nonrepresentable_section);
+      return FALSE;
+    }
+
   /* Select the allocated sections, and sort them.  */
 
   sections = bfd_malloc2 (bfd_count_sections (abfd), sizeof (asection *));
@@ -4085,7 +4097,7 @@ assign_file_positions_for_segments (bfd 
 
   if (elf_tdata (abfd)->segment_map == NULL)
     {
-      if (! map_sections_to_segments (abfd))
+      if (! map_sections_to_segments (abfd, link_info))
 	return FALSE;
     }
   else


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]