aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2024-08-10 08:41:16 +0930
committerAndreas K. Hüttel <dilfridge@gentoo.org>2024-08-20 21:22:10 +0200
commit80ee1182e4077e897e89f3dfbe7aa17432dbf8c0 (patch)
tree834bc2d57d285d1e5936cbb37d9395d3b821cd94
parentgas: sparc: Fix faligndatai assembly and disassembly (diff)
downloadbinutils-gdb-80ee1182e4077e897e89f3dfbe7aa17432dbf8c0.tar.gz
binutils-gdb-80ee1182e4077e897e89f3dfbe7aa17432dbf8c0.tar.bz2
binutils-gdb-80ee1182e4077e897e89f3dfbe7aa17432dbf8c0.zip
PR32067, ld -Wl,--oformat,binary crash in _bfd_elf_link_keep_memory
The direct fix for this segfault is to test for a non-NULL bed in _bfd_elf_link_keep_memory, but also there isn't much point in running code for LTO if the output is binary. PR 32067 * elflink.c (_bfd_elf_link_keep_memory): Test for non-NULL bed. (elf_link_add_object_symbols): Don't run the loop setting non_ir_ref_regular if the output hash table is not ELF. (cherry picked from commit ec8f5671b4e70806fe3053636426a8d179dfef55) (cherry picked from commit 28867943aa28087a1f71ac8167321711de759be7)
-rw-r--r--bfd/elflink.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index a180e59e8ca..2430d606c30 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -64,7 +64,7 @@ _bfd_elf_link_keep_memory (struct bfd_link_info *info)
this is opt-in by each backend. */
const struct elf_backend_data *bed
= get_elf_backend_data (info->output_bfd);
- if (bed->use_mmap)
+ if (bed != NULL && bed->use_mmap)
return false;
#endif
bfd *abfd;
@@ -5694,7 +5694,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
&& !bfd_link_relocatable (info)
&& (abfd->flags & BFD_PLUGIN) == 0
&& !just_syms
- && extsymcount)
+ && extsymcount != 0
+ && is_elf_hash_table (&htab->root))
{
int r_sym_shift;