]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Add Zicfilp ISA extension.
authorMonk Chiang <monk.chiang@sifive.com>
Fri, 22 Mar 2024 13:00:24 +0000 (21:00 +0800)
committerMonk Chiang <monk.chiang@sifive.com>
Fri, 17 Jan 2025 02:50:17 +0000 (10:50 +0800)
commit805a052d0083e8e76c720fd7ac52cb3ccc36c310
treeac713e827634e9710f44c4528a798ddb9fd8aa9b
parentdc76aa0e4d5398104b6b26f08b46524b97de5100
RISC-V: Add Zicfilp ISA extension.

This patch only support landing pad value is 0.
The next version will implement function signature based labeling
scheme.

RISC-V CFI SPEC: https://github.com/riscv/riscv-cfi

gcc/ChangeLog:
* common/config/riscv/riscv-common.cc: Add ZICFILP ISA
string.
* config.gcc: Add riscv-zicfilp.o
* config/riscv/riscv-passes.def (INSERT_PASS_BEFORE):
Insert landing pad instructions.
* config/riscv/riscv-protos.h (make_pass_insert_landing_pad):
Declare.
* config/riscv/riscv-zicfilp.cc: New file.
* config/riscv/riscv.cc
(riscv_trampoline_init): Add landing pad instructions.
(riscv_legitimize_call_address): Likewise.
(riscv_output_mi_thunk): Likewise.
* config/riscv/riscv.h: Update.
* config/riscv/riscv.md: Add landing pad patterns.
* config/riscv/riscv.opt (TARGET_ZICFILP): Define.
* config/riscv/t-riscv: Add build rule for
riscv-zicfilp.o

gcc/testsuite/ChangeLog:
* gcc.target/riscv/interrupt-no-lpad.c: New test.
* gcc.target/riscv/zicfilp-call.c: New test.

Co-Developed-by: Greg McGary <gkm@rivosinc.com>,
Kito Cheng <kito.cheng@gmail.com>
12 files changed:
gcc/common/config/riscv/riscv-common.cc
gcc/config.gcc
gcc/config/riscv/riscv-passes.def
gcc/config/riscv/riscv-protos.h
gcc/config/riscv/riscv-zicfilp.cc [new file with mode: 0644]
gcc/config/riscv/riscv.cc
gcc/config/riscv/riscv.h
gcc/config/riscv/riscv.md
gcc/config/riscv/riscv.opt
gcc/config/riscv/t-riscv
gcc/testsuite/gcc.target/riscv/interrupt-no-lpad.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/zicfilp-call.c [new file with mode: 0644]