From: Alan Modra Date: Fri, 9 Aug 2024 23:11:16 +0000 (+0930) Subject: PR32067, ld -Wl,--oformat,binary crash in _bfd_elf_link_keep_memory X-Git-Tag: binutils-2_43_1~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=28867943aa28087a1f71ac8167321711de759be7;p=thirdparty%2Fbinutils-gdb.git 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) --- 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;