[Darwin, PPC] Do not use longcall for 64b code.
authorIain Sandoe <iain@sandoe.co.uk>
Thu, 27 Jun 2019 18:56:53 +0000 (18:56 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Thu, 27 Jun 2019 18:56:53 +0000 (18:56 +0000)
The linker [ld64] that supports 64Bit does not need the JBSR longcall
optimisation, and will not work with the most generic case (where the
symbol is undefined external, but there is no symbl stub).  So switch
the longcall option off.  ld64 will generate branch islands as needed.

2019-06-27  Iain Sandoe  <iain@sandoe.co.uk>

* config/rs6000/rs6000.c (darwin_rs6000_override_options): Do not
use longcall for 64b code.

From-SVN: r272758

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index b548ac3d6ca565eac96e2aa10ea1f038cbab4e98..7e6396c2eb0814930d6379362ce1d87aa064430a 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-27  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/rs6000/rs6000.c (darwin_rs6000_override_options): Do not
+       use longcall for 64b code.
+
 2019-06-27  Aaron Sawdey <acsawdey@linux.ibm.com>
 
        * builtins.c (get_memory_rtx): Fix comment.
index 3b59db5cf2cd0f9b1ab8a17776f68afb4bf239d1..fbff6bdb0a5faa7b264f475d40b8b33fde4c65d8 100644 (file)
@@ -3418,6 +3418,15 @@ darwin_rs6000_override_options (void)
       rs6000_isa_flags |= OPTION_MASK_POWERPC64;
       warning (0, "%qs requires PowerPC64 architecture, enabling", "-m64");
     }
+
+  /* The linkers [ld64] that support 64Bit do not need the JBSR longcall
+     optimisation, and will not work with the most generic case (where the
+     symbol is undefined external, but there is no symbl stub).  */
+  if (TARGET_64BIT)
+    rs6000_default_long_calls = 0;
+
+  /* ld_classic is (so far) still used for kernel (static) code, and supports
+     the JBSR longcall / branch islands.  */
   if (flag_mkernel)
     {
       rs6000_default_long_calls = 1;