diff options
author | Alan Modra <amodra@gmail.com> | 2020-07-29 17:34:18 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-07-29 17:39:54 +0930 |
commit | 4d68fd750fa0ce9de7a5245f9eff539f31a95fb6 (patch) | |
tree | 12a79a0a26572122cebbb39015714597fd2daac6 /bfd/elflink.c | |
parent | 5987401fcbc9933808fa0d84d1b01c93356c39a1 (diff) | |
download | gdb-4d68fd750fa0ce9de7a5245f9eff539f31a95fb6.zip gdb-4d68fd750fa0ce9de7a5245f9eff539f31a95fb6.tar.gz gdb-4d68fd750fa0ce9de7a5245f9eff539f31a95fb6.tar.bz2 |
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.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c index a3823e6..5089616 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; |