This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] PowerPC64 stubs don't match calculated size


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=25516cc573ff3551a7ac0538e1d3de5811c7199e

commit 25516cc573ff3551a7ac0538e1d3de5811c7199e
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Sep 19 13:22:49 2017 +0930

    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.

Diff:
---
 bfd/ChangeLog   | 6 ++++++
 bfd/elf64-ppc.c | 7 +------
 2 files changed, 7 insertions(+), 6 deletions(-)

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  <amodra@gmail.com>
 
+	PR 21441
+	* elf64-ppc.c (ppc64_elf_build_stubs): Don't check glink_eh_frame
+	size.
+
+2017-09-19  Alan Modra  <amodra@gmail.com>
+
 	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"));


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]