From 25516cc573ff3551a7ac0538e1d3de5811c7199e Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 19 Sep 2017 13:22:49 +0930 Subject: PowerPC64 stubs don't match calculated size After the PR 21411 fix, the linker generated .eh_frame for ppc64 glink can be edited by the generic code. The sequence of events goes something like: 1) Some object file adds .eh_frame aligned to 8, making the output .eh_frame aligned to at least 8, so linker generated .eh_frame FDE is padded to an 8 byte boundary. 2) All .eh_frame past the glink .eh_frame is garbage collected. 3) Generic code detects that last FDE (the glink .eh_frame) doesn't need to be padded to an 8 byte boundary, reducing size from 88 to 84. 4) elf64-ppc.c check fails. PR 21441 * elf64-ppc.c (ppc64_elf_build_stubs): Don't check glink_eh_frame size. --- bfd/ChangeLog | 6 ++++++ bfd/elf64-ppc.c | 7 +------ 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eb62bc3..4c8c12c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ 2017-09-19 Alan Modra + PR 21441 + * elf64-ppc.c (ppc64_elf_build_stubs): Don't check glink_eh_frame + size. + +2017-09-19 Alan Modra + PR 22150 * elflink.c (bfd_elf_size_dynamic_sections): Garbage collect symbols before calculating verrefs. Don't renumber dynsyms diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 4821801..ea49706 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -13411,12 +13411,7 @@ ppc64_elf_build_stubs (struct bfd_link_info *info, break; } - /* Note that the glink_eh_frame check here is not only testing that - the generated size matched the calculated size but also that - bfd_elf_discard_info didn't make any changes to the section. */ - if (group != NULL - || (htab->glink_eh_frame != NULL - && htab->glink_eh_frame->rawsize != htab->glink_eh_frame->size)) + if (group != NULL) { htab->stub_error = TRUE; info->callbacks->einfo (_("%P: stubs don't match calculated size\n")); -- cgit v1.1