Fix segfault in microblaze linker when garbage collection removes a symbol scheduled for a slot in the PLT.

PR ld/21180
	* elf32-microblaze.c (microblaze_elf_finish_dynamic_symbol): Avoid
	generating a seg-fault when encountering a symbol that has been
	deleted by garbage collection.
This commit is contained in:
Nick Clifton 2017-02-27 11:33:05 +00:00
parent 8e3681243c
commit bd757ca7bf
2 changed files with 17 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2017-02-27 Nick Clifton <nickc@redhat.com>
PR ld/21180
* elf32-microblaze.c (microblaze_elf_finish_dynamic_symbol): Avoid
generating a seg-fault when encountering a symbol that has been
deleted by garbage collection.
2017-02-25 Alan Modra <amodra@gmail.com>
* elf32-arc.c (struct dynamic_sections): Delete.

View File

@ -3234,13 +3234,20 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd,
|| h->dynindx == -1))
{
asection *sec = h->root.u.def.section;
bfd_vma value;
value = h->root.u.def.value;
if (sec->output_section != NULL)
/* PR 21180: If the output section is NULL, then the symbol is no
longer needed, and in theory the GOT entry is redundant. But
it is too late to change our minds now... */
value += sec->output_section->vma + sec->output_offset;
microblaze_elf_output_dynamic_relocation (output_bfd,
srela, srela->reloc_count++,
/* symindex= */ 0,
R_MICROBLAZE_REL, offset,
h->root.u.def.value
+ sec->output_section->vma
+ sec->output_offset);
value);
}
else
{