From: Iain Sandoe Date: Mon, 24 Dec 2018 12:47:58 +0000 (+0000) Subject: Fix target/78444 on x86/Darwin. X-Git-Tag: releases/gcc-7.5.0~696 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=615bf7d905e0ae72ad095959ca7060661b6ceaac;p=thirdparty%2Fgcc.git Fix target/78444 on x86/Darwin. 2018-12-24 Iain Sandoe Backport from mainline 2018-12-06 Iain Sandoe 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: r267406 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cb5532156ddf..2950768e0077 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2018-12-24 Iain Sandoe + + Backport from mainline + 2018-12-06 Iain Sandoe + + 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-24 Iain Sandoe Backport from mainline diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 3a4beb05904f..ebaa15a21992 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -85,9 +85,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 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 637ac5fa98ec..1ca7109976fc 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -12788,10 +12788,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;