]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Report bfd_merge_sections error
authorAlan Modra <amodra@gmail.com>
Sun, 20 Oct 2024 06:43:31 +0000 (17:13 +1030)
committerAlan Modra <amodra@gmail.com>
Sun, 20 Oct 2024 06:45:53 +0000 (17:15 +1030)
PR 32260
bfd/
* elfxx-target.h (bfd_elfNN_bfd_merge_sections): Default to
bfd_generic_merge_sections when using the generic linker.
* elflink.c (_bfd_elf_merge_sections): Return error from
_bfd_merge_sections.  Abort on wrong hash table.
ld/
* ldlang.c (lang_process): Report bfd_merge_sections error.

bfd/elflink.c
bfd/elfxx-target.h
ld/ldlang.c

index bcac35a49d7660b878edd4f2997ece0696d3f527..ef159dafd55f8ff31746fe8f0f023142f34ad119 100644 (file)
@@ -8109,8 +8109,8 @@ _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
   bfd *ibfd;
   asection *sec;
 
-  if (!is_elf_hash_table (info->hash))
-    return false;
+  if (ENABLE_CHECKING && !is_elf_hash_table (info->hash))
+    abort ();
 
   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
     if ((ibfd->flags & DYNAMIC) == 0
@@ -8133,8 +8133,8 @@ _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
          }
 
   if (elf_hash_table (info)->merge_info != NULL)
-    _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
-                        merge_sections_remove_hook);
+    return _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
+                               merge_sections_remove_hook);
   return true;
 }
 
index 075f1bdd4334313e2db5b4287fec8db4f8528819..d10391dcb43ca6cebda67417773b9036a55a8d80 100644 (file)
 #define bfd_elfNN_bfd_gc_sections bfd_elf_gc_sections
 #endif
 
-#ifndef bfd_elfNN_bfd_merge_sections
-#define bfd_elfNN_bfd_merge_sections \
-  _bfd_elf_merge_sections
-#endif
-
 #ifndef bfd_elfNN_bfd_is_group_section
 #define bfd_elfNN_bfd_is_group_section bfd_elf_is_group_section
 #endif
 #ifndef bfd_elfNN_bfd_final_link
 #define bfd_elfNN_bfd_final_link       bfd_elf_final_link
 #endif
+#ifndef bfd_elfNN_bfd_merge_sections
+#define bfd_elfNN_bfd_merge_sections   _bfd_elf_merge_sections
+#endif
 #else /* ! defined (elf_backend_relocate_section) */
 /* If no backend relocate_section routine, use the generic linker.
    Note - this will prevent the port from being able to use some of
 #ifndef bfd_elfNN_bfd_final_link
 #define bfd_elfNN_bfd_final_link       _bfd_generic_final_link
 #endif
+#ifndef bfd_elfNN_bfd_merge_sections
+#define bfd_elfNN_bfd_merge_sections   bfd_generic_merge_sections
+#endif
 #endif /* ! defined (elf_backend_relocate_section) */
 
 #ifndef bfd_elfNN_bfd_link_just_syms
index 343c4de53f48fbe2ffa3e86a0cd50aa19cba9e65..00b214411d65319ced45fc8dd1b78d953123c673 100644 (file)
@@ -8426,7 +8426,8 @@ lang_process (void)
         sections, so that GCed sections are not merged, but before
         assigning dynamic symbols, since removing whole input sections
         is hard then.  */
-      bfd_merge_sections (link_info.output_bfd, &link_info);
+      if (!bfd_merge_sections (link_info.output_bfd, &link_info))
+       einfo (_("%F%P: bfd_merge_sections failed: %E\n"));
 
       /* Look for a text section and set the readonly attribute in it.  */
       found = bfd_get_section_by_name (link_info.output_bfd, ".text");