[GOLD, PowerPC] Add --no-stub-group-multi
authorAlan Modra <amodra@gmail.com>
Tue, 19 Sep 2017 02:15:51 +0000 (11:45 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 19 Sep 2017 02:15:51 +0000 (11:45 +0930)
The trouble with stubs per output section is that ppc32 uses a plt
stub as the address of a global function.  This needs to be unique,
otherwise we'll get multiple addresses for a function.

Obviously this is only a partial solution, since ppc32 will get
multiple stubs when code is larger than 33M.  A proper fix will
involve selecting a unique stub to use for non-branch relocs.

* options.h (stub-group-multi): Default to true.  Add
--no-stub-group-multi.

gold/ChangeLog
gold/options.h

index 23432155853c4aa1849bdbf81462496dd6fb0565..867cbef2ed374002e5b61f798fdce394def616f2 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-19  Alan Modra  <amodra@gmail.com>
+
+       * options.h (stub-group-multi): Default to true.  Add
+       --no-stub-group-multi.
+
 2017-08-30  Alan Modra  <amodra@gmail.com>
 
        * powerpc.cc (Target_powerpc::Relocate::relocate): Nop addis on
index 6d10b416b06405925c1e2ce2df2450af13c30d5a..93f81b29afcc803edf9f1f5ba574cf8a410ea0e9 100644 (file)
@@ -1235,9 +1235,10 @@ class General_options
                "stubs are always after the group. 1 means use default size"),
             N_("SIZE"));
 
-  DEFINE_bool(stub_group_multi, options::TWO_DASHES, '\0', false,
+  DEFINE_bool(stub_group_multi, options::TWO_DASHES, '\0', true,
              N_("(PowerPC only) Allow a group of stubs to serve multiple "
-                "output sections"), NULL);
+                "output sections"),
+             N_("(PowerPC only) Each output section has its own stubs"));
 
   DEFINE_uint(split_stack_adjust_size, options::TWO_DASHES, '\0', 0x4000,
              N_("Stack size when -fsplit-stack function calls non-split"),