Commit 44d6626c by Iain Sandoe Committed by Iain Sandoe

Fix for PR78444 by ensuring 128b alignment at call sites.

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
parent 31460ed2
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> 2018-12-06 Jakub Jelinek <jakub@redhat.com>
PR target/87598 PR target/87598
...@@ -111,9 +111,6 @@ extern int darwin_emit_branch_islands; ...@@ -111,9 +111,6 @@ extern int darwin_emit_branch_islands;
/* On Darwin, the stack is 128-bit aligned at the point of every call. /* 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 Failure to ensure this will lead to a crash in the system libraries
or dynamic loader. */ or dynamic loader. */
#undef STACK_BOUNDARY
#define STACK_BOUNDARY \
((profile_flag || TARGET_64BIT_MS_ABI) ? 128 : BITS_PER_WORD)
#undef MAIN_STACK_BOUNDARY #undef MAIN_STACK_BOUNDARY
#define MAIN_STACK_BOUNDARY 128 #define MAIN_STACK_BOUNDARY 128
......
...@@ -11202,10 +11202,16 @@ ix86_compute_frame_layout (void) ...@@ -11202,10 +11202,16 @@ ix86_compute_frame_layout (void)
/* 64-bit MS ABI seem to require stack alignment to be always 16, /* 64-bit MS ABI seem to require stack alignment to be always 16,
except for function prologues, leaf functions and when the defult except for function prologues, leaf functions and when the defult
incoming stack boundary is overriden at command line or via incoming stack boundary is overriden at command line or via
force_align_arg_pointer attribute. */ force_align_arg_pointer attribute.
if ((TARGET_64BIT_MS_ABI && crtl->preferred_stack_boundary < 128)
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 && (!crtl->is_leaf || cfun->calls_alloca != 0
|| ix86_current_function_calls_tls_descriptor || ix86_current_function_calls_tls_descriptor
|| (TARGET_MACHO && crtl->profile)
|| ix86_incoming_stack_boundary < 128)) || ix86_incoming_stack_boundary < 128))
{ {
crtl->preferred_stack_boundary = 128; crtl->preferred_stack_boundary = 128;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment