]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR32067, ld -Wl,--oformat,binary crash in _bfd_elf_link_keep_memory
authorAlan Modra <amodra@gmail.com>
Fri, 9 Aug 2024 23:11:16 +0000 (08:41 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 10 Aug 2024 00:58:32 +0000 (10:28 +0930)
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.

bfd/elflink.c

index a180e59e8cadad203cec012a6dd030ed6394a507..2430d606c30c31c7de69716aba99d9005d7fb15c 100644 (file)
@@ -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;