Skip to content
Snippets Groups Projects
Commit b82d173d authored by Raphael Moreira Zinsly's avatar Raphael Moreira Zinsly
Browse files

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.
parent 5694fcf7
No related branches found
No related tags found
No related merge requests found
Showing
with 440 additions and 39 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment