aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2024-10-20 17:13:31 +1030
committerAlan Modra <amodra@gmail.com>2024-10-20 17:15:53 +1030
commit32dc367249e85ecb2449d4be8cafc8e3fc2f359f (patch)
tree4845f6f58bea8a4374d17605865fb9cc3a7bdd5e
parent17b145510f2d920ae3ae5d30a0d7f33f0db67c28 (diff)
downloadbinutils-32dc367249e85ecb2449d4be8cafc8e3fc2f359f.zip
binutils-32dc367249e85ecb2449d4be8cafc8e3fc2f359f.tar.gz
binutils-32dc367249e85ecb2449d4be8cafc8e3fc2f359f.tar.bz2
Report bfd_merge_sections error
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.
-rw-r--r--bfd/elflink.c8
-rw-r--r--bfd/elfxx-target.h11
-rw-r--r--ld/ldlang.c3
3 files changed, 12 insertions, 10 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index bcac35a..ef159da 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -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;
}
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 075f1bd..d10391d 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -187,11 +187,6 @@
#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
@@ -287,6 +282,9 @@
#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
@@ -310,6 +308,9 @@
#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
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 343c4de..00b2144 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -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");