You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.0 KiB
79 lines
3.0 KiB
diff -rup binutils.orig/bfd/elf64-ppc.c binutils-2.27/bfd/elf64-ppc.c |
|
--- binutils.orig/bfd/elf64-ppc.c 2017-11-16 10:35:34.873666405 +0000 |
|
+++ binutils-2.27/bfd/elf64-ppc.c 2017-11-16 10:39:54.037530964 +0000 |
|
@@ -10105,6 +10105,10 @@ ppc64_elf_size_dynamic_sections (bfd *ou |
|
continue; |
|
} |
|
|
|
+ if (bfd_is_abs_section (s->output_section)) |
|
+ _bfd_error_handler (_("warning: discarding dynamic section %s"), |
|
+ s->name); |
|
+ |
|
if ((s->flags & SEC_HAS_CONTENTS) == 0) |
|
continue; |
|
|
|
@@ -10875,7 +10879,7 @@ ppc_build_one_stub (struct bfd_hash_entr |
|
+ htab->brlt->output_section->vma); |
|
|
|
off = (dest |
|
- - elf_gp (htab->brlt->output_section->owner) |
|
+ - elf_gp (info->output_bfd) |
|
- htab->sec_info[stub_entry->group->link_sec->id].toc_off); |
|
|
|
if (off + 0x80008000 > 0xffffffff || (off & 7) != 0) |
|
@@ -11025,7 +11029,7 @@ ppc_build_one_stub (struct bfd_hash_entr |
|
} |
|
|
|
off = (dest |
|
- - elf_gp (plt->output_section->owner) |
|
+ - elf_gp (info->output_bfd) |
|
- htab->sec_info[stub_entry->group->link_sec->id].toc_off); |
|
|
|
if (off + 0x80008000 > 0xffffffff || (off & 7) != 0) |
|
@@ -11172,7 +11176,7 @@ ppc_size_one_stub (struct bfd_hash_entry |
|
plt = htab->elf.iplt; |
|
off += (plt->output_offset |
|
+ plt->output_section->vma |
|
- - elf_gp (plt->output_section->owner) |
|
+ - elf_gp (info->output_bfd) |
|
- htab->sec_info[stub_entry->group->link_sec->id].toc_off); |
|
|
|
size = plt_stub_size (htab, stub_entry, off); |
|
@@ -11266,7 +11270,7 @@ ppc_size_one_stub (struct bfd_hash_entry |
|
off = (br_entry->offset |
|
+ htab->brlt->output_offset |
|
+ htab->brlt->output_section->vma |
|
- - elf_gp (htab->brlt->output_section->owner) |
|
+ - elf_gp (info->output_bfd) |
|
- htab->sec_info[stub_entry->group->link_sec->id].toc_off); |
|
|
|
if (info->emitrelocations) |
|
@@ -11386,7 +11390,7 @@ ppc64_elf_next_toc_section (struct bfd_l |
|
output toc base plus 0x8000. Making the input elf_gp an |
|
offset allows us to move the toc as a whole without |
|
recalculating input elf_gp. */ |
|
- off = htab->toc_curr - elf_gp (isec->output_section->owner); |
|
+ off = htab->toc_curr - elf_gp (info->output_bfd); |
|
off += TOC_BASE_OFF; |
|
|
|
/* Die if someone uses a linker script that doesn't keep input |
|
@@ -11415,7 +11419,7 @@ ppc64_elf_next_toc_section (struct bfd_l |
|
} |
|
addr = (htab->toc_first_sec->output_offset |
|
+ htab->toc_first_sec->output_section->vma); |
|
- off = addr - elf_gp (isec->output_section->owner) + TOC_BASE_OFF; |
|
+ off = addr - elf_gp (info->output_bfd) + TOC_BASE_OFF; |
|
elf_gp (isec->owner) = off; |
|
|
|
return TRUE; |
|
diff -rup binutils.orig/ld/testsuite/ld-elf/note-3.t binutils-2.27/ld/testsuite/ld-elf/note-3.t |
|
--- binutils.orig/ld/testsuite/ld-elf/note-3.t 2017-11-16 10:35:35.670656893 +0000 |
|
+++ binutils-2.27/ld/testsuite/ld-elf/note-3.t 2017-11-16 10:59:06.352286215 +0000 |
|
@@ -17,6 +17,7 @@ SECTIONS |
|
|
|
.dynstr : { *(.dynstr) } |
|
.dynsym : { *(.dynsym) } |
|
+ .got : { *(.got .toc) *(.igot) } |
|
.got.plt : { *(.got.plt) *(.igot.plt) } |
|
/DISCARD/ : { *(*) } |
|
}
|
|
|