From: Alan Modra Date: Sat, 24 Aug 2019 00:29:03 +0000 (+0930) Subject: PowerPC64 segfault in ppc64_elf_edit_toc X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d5554a605a8ce908ba04b00fd960d02ca9fc613;p=binutils-gdb.git PowerPC64 segfault in ppc64_elf_edit_toc Found on a GOT reference to __ehdr_start, which is tweaked to be undefined weak at some stages of linking. SYMBOL_REFERENCES_LOCAL isn't a sufficient test. * elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak symbols from GOT optimisation. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 981e0cd4e92..9f7a8cfc6af 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2019-08-24 Alan Modra + + * elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak + symbols from GOT optimisation. + 2019-08-23 Stafford Horne * elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 60918d91a17..4eba8294508 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -9112,6 +9112,11 @@ ppc64_elf_edit_toc (struct bfd_link_info *info) r_symndx, ibfd)) goto got_error_ret; + if (sym_sec == NULL + || sym_sec->output_section == NULL + || discarded_section (sym_sec)) + continue; + if (!SYMBOL_REFERENCES_LOCAL (info, h)) continue;