From 4d68fd750fa0ce9de7a5245f9eff539f31a95fb6 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 29 Jul 2020 17:34:18 +0930 Subject: [PATCH] Don't segfault on discarded section dynsyms We get lots of errors before we get to this code, but let's not segfault. * elflink.c (bfd_elf_final_link): Don't segfault on local dynsyms defined in excluded sections. --- bfd/ChangeLog | 5 +++++ bfd/elflink.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1e7fb4a8753..8e8dc99c1aa 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2020-07-29 Alan Modra + + * elflink.c (bfd_elf_final_link): Don't segfault on local dynsyms + defined in excluded sections. + 2020-07-28 Alan Modra * elf.c (assign_section_numbers): Comment. Don't segfault on diff --git a/bfd/elflink.c b/bfd/elflink.c index a3823e63222..5089616aeef 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -12599,10 +12599,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) the original st_name with the dynstr_index. */ sym = e->isym; sym.st_other &= ~ELF_ST_VISIBILITY (-1); + sym.st_shndx = SHN_UNDEF; s = bfd_section_from_elf_index (e->input_bfd, e->isym.st_shndx); - if (s != NULL) + if (s != NULL + && s->output_section != NULL + && elf_section_data (s->output_section) != NULL) { sym.st_shndx = elf_section_data (s->output_section)->this_idx; -- 2.30.2