You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
5.6 KiB
143 lines
5.6 KiB
commit 8a1b46d59d6c3e1e5eb606cd44689c8557612257 |
|
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4> |
|
Date: Wed Sep 20 05:21:09 2017 +0000 |
|
|
|
* config/alpha/alpha.c (alpha_expand_prologue): Also check |
|
flag_stack_clash_protection. |
|
* config/ia64/ia64.c (ia64_compute_frame_size): Likewise. |
|
(ia64_expand_prologue): Likewise. |
|
* config/mips/mips.c (mips_expand_prologue): Likewise. |
|
* config/sparc/sparc.c (sparc_expand_prologue): Likewise. |
|
(sparc_flat_expand_prologue): Likewise. |
|
* config/spu/spu.c (spu_expand_prologue): Likewise. |
|
|
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@252996 138bc75d-0d04-0410-961f-82ee72b054a4 |
|
|
|
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c |
|
index 5402f5213d6..c46c843e462 100644 |
|
--- a/gcc/config/alpha/alpha.c |
|
+++ b/gcc/config/alpha/alpha.c |
|
@@ -7624,7 +7624,7 @@ alpha_expand_prologue (void) |
|
Note that we are only allowed to adjust sp once in the prologue. */ |
|
|
|
probed_size = frame_size; |
|
- if (flag_stack_check) |
|
+ if (flag_stack_check || flag_stack_clash_protection) |
|
probed_size += get_stack_check_protect (); |
|
|
|
if (probed_size <= 32768) |
|
@@ -7639,7 +7639,7 @@ alpha_expand_prologue (void) |
|
/* We only have to do this probe if we aren't saving registers or |
|
if we are probing beyond the frame because of -fstack-check. */ |
|
if ((sa_size == 0 && probed_size > probed - 4096) |
|
- || flag_stack_check) |
|
+ || flag_stack_check || flag_stack_clash_protection) |
|
emit_insn (gen_probe_stack (GEN_INT (-probed_size))); |
|
} |
|
|
|
@@ -7669,7 +7669,8 @@ alpha_expand_prologue (void) |
|
late in the compilation, generate the loop as a single insn. */ |
|
emit_insn (gen_prologue_stack_probe_loop (count, ptr)); |
|
|
|
- if ((leftover > 4096 && sa_size == 0) || flag_stack_check) |
|
+ if ((leftover > 4096 && sa_size == 0) |
|
+ || flag_stack_check || flag_stack_clash_protection) |
|
{ |
|
rtx last = gen_rtx_MEM (DImode, |
|
plus_constant (Pmode, ptr, -leftover)); |
|
@@ -7677,7 +7678,7 @@ alpha_expand_prologue (void) |
|
emit_move_insn (last, const0_rtx); |
|
} |
|
|
|
- if (flag_stack_check) |
|
+ if (flag_stack_check || flag_stack_clash_protection) |
|
{ |
|
/* If -fstack-check is specified we have to load the entire |
|
constant into a register and subtract from the sp in one go, |
|
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c |
|
index 390983936e8..5bf7046cf15 100644 |
|
--- a/gcc/config/ia64/ia64.c |
|
+++ b/gcc/config/ia64/ia64.c |
|
@@ -2638,7 +2638,8 @@ ia64_compute_frame_size (HOST_WIDE_INT size) |
|
mark_reg_gr_used_mask (cfun->machine->ia64_eh_epilogue_bsp, NULL); |
|
|
|
/* Static stack checking uses r2 and r3. */ |
|
- if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK) |
|
+ if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection) |
|
current_frame_info.gr_used_mask |= 0xc; |
|
|
|
/* Find the size of the register stack frame. We have only 80 local |
|
@@ -3434,7 +3435,8 @@ ia64_expand_prologue (void) |
|
if (flag_stack_usage_info) |
|
current_function_static_stack_size = current_frame_info.total_size; |
|
|
|
- if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK) |
|
+ if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection) |
|
ia64_emit_probe_stack_range (get_stack_check_protect (), |
|
current_frame_info.total_size, |
|
current_frame_info.n_input_regs |
|
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c |
|
index 9b7eb678f19..da17f94b4f9 100644 |
|
--- a/gcc/config/mips/mips.c |
|
+++ b/gcc/config/mips/mips.c |
|
@@ -10745,7 +10745,9 @@ mips_expand_prologue (void) |
|
if (flag_stack_usage_info) |
|
current_function_static_stack_size = size; |
|
|
|
- if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK && size) |
|
+ if ((flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection) |
|
+ && size) |
|
mips_emit_probe_stack_range (get_stack_check_protect (), size); |
|
|
|
/* Save the registers. Allocate up to MIPS_MAX_FIRST_STACK_STEP |
|
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c |
|
index e5e93c80261..617aa617208 100644 |
|
--- a/gcc/config/sparc/sparc.c |
|
+++ b/gcc/config/sparc/sparc.c |
|
@@ -5430,7 +5430,9 @@ sparc_expand_prologue (void) |
|
if (flag_stack_usage_info) |
|
current_function_static_stack_size = size; |
|
|
|
- if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK && size) |
|
+ if ((flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection) |
|
+ && size) |
|
sparc_emit_probe_stack_range (get_stack_check_protect (), size); |
|
|
|
if (size == 0) |
|
@@ -5532,7 +5534,9 @@ sparc_flat_expand_prologue (void) |
|
if (flag_stack_usage_info) |
|
current_function_static_stack_size = size; |
|
|
|
- if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK && size) |
|
+ if ((flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection) |
|
+ && size) |
|
sparc_emit_probe_stack_range (get_stack_check_protect (), size); |
|
|
|
if (sparc_save_local_in_regs_p) |
|
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c |
|
index 328bd5bd2ae..5541a3cd243 100644 |
|
--- a/gcc/config/spu/spu.c |
|
+++ b/gcc/config/spu/spu.c |
|
@@ -1761,7 +1761,7 @@ spu_expand_prologue (void) |
|
|
|
if (total_size > 0) |
|
{ |
|
- if (flag_stack_check) |
|
+ if (flag_stack_check || flag_stack_clash_protection) |
|
{ |
|
/* We compare against total_size-1 because |
|
($sp >= total_size) <=> ($sp > total_size-1) */ |
|
@@ -5366,7 +5366,7 @@ spu_allocate_stack (rtx op0, rtx op1) |
|
emit_insn (gen_spu_convert (sp, stack_pointer_rtx)); |
|
emit_insn (gen_subv4si3 (sp, sp, splatted)); |
|
|
|
- if (flag_stack_check) |
|
+ if (flag_stack_check || flag_stack_clash_protection) |
|
{ |
|
rtx avail = gen_reg_rtx(SImode); |
|
rtx result = gen_reg_rtx(SImode);
|
|
|