PowerPC gcc bootstrap fail with bss-plt
authorAlan Modra <amodra@gmail.com>
Fri, 16 Aug 2019 03:50:28 +0000 (13:20 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 16 Aug 2019 04:08:11 +0000 (13:38 +0930)
git commit 3e04d7655b introduced a bug by sizing output sections
earlier in ppc_before_allocation.  That meant PLT (and GOT) sizes were
not included when calculating total executable section sizes.

* emultempl/ppc32elf.em (ppc_before_allocation): Force running
prelim_size_sections before deciding whether branch trampolines
might be needed.

ld/ChangeLog
ld/emultempl/ppc32elf.em

index 0366b83..de8e1b9 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-16  Alan Modra  <amodra@gmail.com>
+
+       * emultempl/ppc32elf.em (ppc_before_allocation): Force running
+       prelim_size_sections before deciding whether branch trampolines
+       might be needed.
+
 2019-08-15  Jim Wilson  <jimw@sifive.com>
 
        * testsuite/ld-riscv-elf/c-lui-2.d: New.
index 5387ef1..24a6368 100644 (file)
@@ -171,7 +171,12 @@ ppc_before_allocation (void)
       bfd_vma high = 0;
       asection *o;
 
-      /* Run lang_size_sections (if not already done).  */
+      /* Run lang_size_sections even if already done, so as to pick
+        up gld${EMULATION_NAME}_before_allocation sizing.  This
+        matters when we have an executable bss plt which will
+        typically be laid out near the end of the image, ie. worst
+        case for branches at the start of .text.  */
+      expld.phase = lang_first_phase_enum;
       prelim_size_sections ();
 
       for (o = link_info.output_bfd->sections; o != NULL; o = o->next)