mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 13:56:22 +08:00
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:
@ -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>
|
2015-12-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/19319
|
PR ld/19319
|
||||||
|
@ -8391,7 +8391,8 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
|
|||||||
if (h != NULL
|
if (h != NULL
|
||||||
&& h->root.type == bfd_link_hash_undefweak)
|
&& h->root.type == bfd_link_hash_undefweak)
|
||||||
ok_tprel = TRUE;
|
ok_tprel = TRUE;
|
||||||
else
|
else if (sym_sec != NULL
|
||||||
|
&& sym_sec->output_section != NULL)
|
||||||
{
|
{
|
||||||
value += sym_sec->output_offset;
|
value += sym_sec->output_offset;
|
||||||
value += sym_sec->output_section->vma;
|
value += sym_sec->output_section->vma;
|
||||||
@ -8952,6 +8953,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
|
|||||||
goto error_ret;
|
goto error_ret;
|
||||||
|
|
||||||
if (sym_sec == NULL
|
if (sym_sec == NULL
|
||||||
|
|| sym_sec->output_section == NULL
|
||||||
|| discarded_section (sym_sec))
|
|| discarded_section (sym_sec))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -12275,7 +12277,9 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
|
|||||||
if (hash == NULL)
|
if (hash == NULL)
|
||||||
{
|
{
|
||||||
sym_value = sym->st_value;
|
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
|
else if (hash->elf.root.type == bfd_link_hash_defined
|
||||||
|| hash->elf.root.type == bfd_link_hash_defweak)
|
|| hash->elf.root.type == bfd_link_hash_defweak)
|
||||||
|
Reference in New Issue
Block a user