Commit 0b06c9a6 by Andreas Krebbel Committed by Andreas Krebbel

S/390: Fix PR84332 ICE with stack clash protection

Our implementation of the stack probe requires the probe interval to
be used as displacement in an address operand.  The maximum probe
interval currently is 64k.  This would exceed short displacements.
Trim that value down to 4k if that happens.  This might result in too
many probes being generated only on the oldest supported machine level
z900.

gcc/ChangeLog:

2018-08-09  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/84332
	* config/s390/s390.c (s390_option_override_internal): Reduce the
	stack-clash-protection-probe-interval param if it would be too big
	for z900.

gcc/testsuite/ChangeLog:

2018-08-09  Andreas Krebbel  <krebbel@linux.ibm.com>

	PR target/84332
	* gcc.target/s390/pr84332.c: New testcase.

From-SVN: r263441
parent a0de11f4
2018-08-09 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/84332
* config/s390/s390.c (s390_option_override_internal): Reduce the
stack-clash-protection-probe-interval param if it would be too big
for z900.
2018-08-08 Andreas Schwab <schwab@linux-m68k.org>
PR target/46179
......
......@@ -14983,6 +14983,17 @@ s390_option_override_internal (struct gcc_options *opts,
else if (opts->x_s390_stack_guard)
error ("-mstack-guard implies use of -mstack-size");
/* Our implementation of the stack probe requires the probe interval
to be used as displacement in an address operand. The maximum
probe interval currently is 64k. This would exceed short
displacements. Trim that value down to 4k if that happens. This
might result in too many probes being generated only on the
oldest supported machine level z900. */
if (!DISP_IN_RANGE ((1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL))))
set_param_value ("stack-clash-protection-probe-interval", 12,
opts->x_param_values,
opts_set->x_param_values);
#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
if (!TARGET_LONG_DOUBLE_128_P (opts_set->x_target_flags))
opts->x_target_flags |= MASK_LONG_DOUBLE_128;
......
2018-08-09 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/84332
* gcc.target/s390/pr84332.c: New testcase.
2018-08-08 Andreas Schwab <schwab@linux-m68k.org>
PR target/46179
......
/* { dg-do compile } */
/* { dg-options "-march=z900 -fstack-clash-protection --param stack-clash-protection-probe-interval=16" } */
struct b
{
char a[65536];
};
void c (void) { struct b d; }
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