RISC-V: Stack-clash protection implemention
This implements stack-clash protection for riscv, with riscv_allocate_and_probe_stack_space being based of aarch64_allocate_and_probe_stack_space from aarch64's implementation. We enforce the probing interval and the guard size to always be equal, their default value is 4Kb which is riscv page size. We also probe up by 1024 bytes in the general case when a probe is required. gcc/ChangeLog: * config/riscv/riscv.cc (riscv_option_override): Enforce that interval is the same size as guard size. (riscv_allocate_and_probe_stack_space): New function. (riscv_expand_prologue): Call riscv_allocate_and_probe_stack_space to the final allocation of the stack and add stack-clash dump information. * config/riscv/riscv.h: Define STACK_CLASH_CALLER_GUARD and STACK_CLASH_MAX_UNROLL_PAGES. gcc/testsuite/ChangeLog: * gcc.dg/params/blocksort-part.c: Skip riscv for stack-clash protection intervals. * gcc.dg/pr82788.c: Skip riscv. * gcc.dg/stack-check-6.c: Skip residual check for riscv. * gcc.dg/stack-check-6a.c: Skip riscv. * gcc.target/riscv/stack-check-12.c: New test. * gcc.target/riscv/stack-check-13.c: New test. * gcc.target/riscv/stack-check-cfa-1.c: New test. * gcc.target/riscv/stack-check-cfa-2.c: New test. * gcc.target/riscv/stack-check-prologue-1.c: New test. * gcc.target/riscv/stack-check-prologue-10.c: New test. * gcc.target/riscv/stack-check-prologue-11.c: New test. * gcc.target/riscv/stack-check-prologue-12.c: New test. * gcc.target/riscv/stack-check-prologue-13.c: New test. * gcc.target/riscv/stack-check-prologue-14.c: New test. * gcc.target/riscv/stack-check-prologue-15.c: New test. * gcc.target/riscv/stack-check-prologue-2.c: New test. * gcc.target/riscv/stack-check-prologue-3.c: New test. * gcc.target/riscv/stack-check-prologue-4.c: New test. * gcc.target/riscv/stack-check-prologue-5.c: New test. * gcc.target/riscv/stack-check-prologue-6.c: New test. * gcc.target/riscv/stack-check-prologue-7.c: New test. * gcc.target/riscv/stack-check-prologue-8.c: New test. * gcc.target/riscv/stack-check-prologue-9.c: New test. * gcc.target/riscv/stack-check-prologue.h: New file. * lib/target-supports.exp (check_effective_target_supports_stack_clash_protection): Add riscv. (check_effective_target_caller_implicit_probes): Likewise.
Showing
- gcc/config/riscv/riscv.cc 209 additions, 35 deletionsgcc/config/riscv/riscv.cc
- gcc/config/riscv/riscv.h 8 additions, 0 deletionsgcc/config/riscv/riscv.h
- gcc/testsuite/gcc.dg/params/blocksort-part.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/params/blocksort-part.c
- gcc/testsuite/gcc.dg/pr82788.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/pr82788.c
- gcc/testsuite/gcc.dg/stack-check-6.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/stack-check-6.c
- gcc/testsuite/gcc.dg/stack-check-6a.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/stack-check-6a.c
- gcc/testsuite/gcc.target/riscv/stack-check-12.c 23 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-12.c
- gcc/testsuite/gcc.target/riscv/stack-check-13.c 26 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-13.c
- gcc/testsuite/gcc.target/riscv/stack-check-cfa-1.c 12 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-cfa-1.c
- gcc/testsuite/gcc.target/riscv/stack-check-cfa-2.c 13 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-cfa-2.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-1.c 9 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-1.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-10.c 11 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-10.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-11.c 11 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-11.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-12.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-12.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-13.c 20 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-13.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-14.c 24 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-14.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-15.c 23 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-15.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-2.c 10 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-2.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-3.c 11 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-3.c
- gcc/testsuite/gcc.target/riscv/stack-check-prologue-4.c 11 additions, 0 deletionsgcc/testsuite/gcc.target/riscv/stack-check-prologue-4.c
Loading
Please register or sign in to comment