Fix for PR78444 by ensuring 128b alignment at call sites.
authorIain Sandoe <iain@sandoe.co.uk>
Thu, 6 Dec 2018 13:36:35 +0000 (13:36 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Thu, 6 Dec 2018 13:36:35 +0000 (13:36 +0000)
2018-12-06  Iain Sandoe  <iain@sandoe.co.uk>

PR target/78444
* config/i386/darwin.h (STACK_BOUNDARY): Remove macro.
* config/i386/i386.c (ix86_compute_frame_layout): Ensure at least 128b
stack alignment in non-leaf functions.

From-SVN: r266853

gcc/ChangeLog
gcc/config/i386/darwin.h
gcc/config/i386/i386.c

index cded91e60bede88c66967ce14fc9a9fb05998501..4b145911548e3e6cc622262889e29718346f5fac 100644 (file)
@@ -1,3 +1,10 @@
+2018-12-06  Iain Sandoe  <iain@sandoe.co.uk>
+
+       PR target/78444
+       * config/i386/darwin.h (STACK_BOUNDARY): Remove macro.
+       * config/i386/i386.c (ix86_compute_frame_layout): Ensure at least 128b
+       stack alignment in non-leaf functions.
+
 2018-12-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/87598
index 1ea5dc3b8297f4a620a75c716b4f051afb581936..53789e7c236d7abc84abc12a793dfde53229dca5 100644 (file)
@@ -111,9 +111,6 @@ extern int darwin_emit_branch_islands;
 /* On Darwin, the stack is 128-bit aligned at the point of every call.
    Failure to ensure this will lead to a crash in the system libraries
    or dynamic loader.  */
-#undef STACK_BOUNDARY
-#define STACK_BOUNDARY \
-  ((profile_flag || TARGET_64BIT_MS_ABI) ? 128 : BITS_PER_WORD)
 
 #undef MAIN_STACK_BOUNDARY
 #define MAIN_STACK_BOUNDARY 128
index 3e2fdfa86ffcd768b51ad800f1412209d881399f..1d7b1f0d1b28a7a9368391cef42fae7b6e7fd160 100644 (file)
@@ -11202,10 +11202,16 @@ ix86_compute_frame_layout (void)
   /* 64-bit MS ABI seem to require stack alignment to be always 16,
      except for function prologues, leaf functions and when the defult
      incoming stack boundary is overriden at command line or via
-     force_align_arg_pointer attribute.  */
-  if ((TARGET_64BIT_MS_ABI && crtl->preferred_stack_boundary < 128)
+     force_align_arg_pointer attribute.
+
+     Darwin's ABI specifies 128b alignment for both 32 and  64 bit variants
+     at call sites, including profile function calls.
+ */
+  if (((TARGET_64BIT_MS_ABI || TARGET_MACHO)
+        && crtl->preferred_stack_boundary < 128)
       && (!crtl->is_leaf || cfun->calls_alloca != 0
          || ix86_current_function_calls_tls_descriptor
+         || (TARGET_MACHO && crtl->profile)
          || ix86_incoming_stack_boundary < 128))
     {
       crtl->preferred_stack_boundary = 128;