Fix powerpc64 segfault caused by zero r_symndx relocs.

Fixes a segfault in ppc64_elf_tls_optimize found when testing
R_PPC64_ENTRY, and potential for trouble in other places found by
code inspection.

	* elf64-ppc.c (ppc64_elf_tls_optimize): Don't segfault on NULL
	symbol section or output section.
	(ppc64_elf_edit_toc): Similarly for ld -R objects.
	(ppc64_elf_size_stubs): Likewise.
This commit is contained in:
Alan Modra 2015-12-02 18:49:53 +10:30
parent 3395762edd
commit c27b8c2aeb
2 changed files with 13 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2015-12-02 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc64_elf_tls_optimize): Don't segfault on NULL
symbol section or output section.
(ppc64_elf_edit_toc): Similarly for ld -R objects.
(ppc64_elf_size_stubs): Likewise.
2015-12-01 H.J. Lu <hongjiu.lu@intel.com>
PR ld/19319

View File

@ -8391,7 +8391,8 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
if (h != NULL
&& h->root.type == bfd_link_hash_undefweak)
ok_tprel = TRUE;
else
else if (sym_sec != NULL
&& sym_sec->output_section != NULL)
{
value += sym_sec->output_offset;
value += sym_sec->output_section->vma;
@ -8952,6 +8953,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
goto error_ret;
if (sym_sec == NULL
|| sym_sec->output_section == NULL
|| discarded_section (sym_sec))
continue;
@ -12275,7 +12277,9 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
if (hash == NULL)
{
sym_value = sym->st_value;
ok_dest = TRUE;
if (sym_sec != NULL
&& sym_sec->output_section != NULL)
ok_dest = TRUE;
}
else if (hash->elf.root.type == bfd_link_hash_defined
|| hash->elf.root.type == bfd_link_hash_defweak)