34 lines
1.5 KiB
Diff
34 lines
1.5 KiB
Diff
|
Fix ld segfault for microblaze when --gc-sections is used
|
||
|
Upstream: pending
|
||
|
https://sourceware.org/bugzilla/show_bug.cgi?id=21180
|
||
|
|
||
|
Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
||
|
|
||
|
diff -Nur binutils-2.26.1.orig/bfd/elf32-microblaze.c binutils-2.26.1/bfd/elf32-microblaze.c
|
||
|
--- binutils-2.26.1.orig/bfd/elf32-microblaze.c 2015-11-13 09:27:40.000000000 +0100
|
||
|
+++ binutils-2.26.1/bfd/elf32-microblaze.c 2017-02-23 19:43:18.536542964 +0100
|
||
|
@@ -3300,13 +3300,20 @@
|
||
|
&& h->def_regular)
|
||
|
{
|
||
|
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
|
||
|
{
|