Skip to content

Commit 2f2e4bb

Browse files
committed
UNRATIFIED RISC-V: Add 'Zicfiss' extension and its CSR
[DO NOT MERGE] Until the 'Zicfiss' extension is frozen/ratified and final version number is determined, this patch should not be merged upstream. This commit uses unratified version 0.3 as in the documentation (instead of possible 1.0 after ratification). This commit adds RISC-V Shadow Stack extension (Zicfiss) and its CSRs based on the document version 0.3 (latest git revision): <riscv/riscv-cfi@d21de9e> bfd/ChangeLog: * elfxx-riscv.c (riscv_implicit_subsets): Add implication 'Zicfiss' -> 'Zicsr', 'Zimop' and 'Zcmop'. (riscv_supported_std_z_ext): Add 'Zicfiss' extension to valid 'Z' extension list. (riscv_multi_subset_supports): Support new instruction class. (riscv_multi_subset_supports_ext): Likewise. gas/ChangeLog: * config/tc-riscv.c (enum riscv_csr_class): Add new CSR class. (riscv_csr_address): Add new CSR class handling. * testsuite/gas/riscv/csr.s: Add new CSR test. * testsuite/gas/riscv/csr-dw-regnums.s: Likewise. * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. * testsuite/gas/riscv/csr-version-1p10.d: Likewise. * testsuite/gas/riscv/csr-version-1p10.l: Likewise. * testsuite/gas/riscv/csr-version-1p11.d: Likewise. * testsuite/gas/riscv/csr-version-1p11.l: Likewise. * testsuite/gas/riscv/csr-version-1p12.d: Likewise. * testsuite/gas/riscv/csr-version-1p12.l: Likewise. * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. * testsuite/gas/riscv/zicfiss.s: New test for shadow stack instructions and its auto-compression. * testsuite/gas/riscv/zicfiss.d: Likewise. * testsuite/gas/riscv/zicfiss-32.s: New test for RV32-only insn. * testsuite/gas/riscv/zicfiss-32.d: Likewise. * testsuite/gas/riscv/zicfiss-64.s: New test for RV64-only insn. * testsuite/gas/riscv/zicfiss-64.d: Likewise. * testsuite/gas/riscv/zicfiss-na.d: Likewise. * testsuite/gas/riscv/zicfiss-mop.s: New test for MOP encoding. * testsuite/gas/riscv/zicfiss-mop-32.d: Likewise. Result on RV32. * testsuite/gas/riscv/zicfiss-mop-64.d: Likewise. Result on RV64. * testsuite/gas/riscv/zicfiss-fail.s: New failure test for shadow stack instructions. * testsuite/gas/riscv/zicfiss-fail.d: Likewise. * testsuite/gas/riscv/zicfiss-fail.l: Likewise. * testsuite/gas/riscv/zicfiss-fail-64.s: New failure test for shadow stack instructions. RV64 only. * testsuite/gas/riscv/zicfiss-fail-64.d: Likewise. * testsuite/gas/riscv/zicfiss-fail-64.l: Likewise. include/ChangeLog: * opcode/riscv-opc.h (MATCH_SSPUSH, MASK_SSPUSH, MATCH_SSPOPCHK, MASK_SSPOPCHK, MATCH_SSLW, MASK_SSLW, MATCH_SSLD, MASK_SSLD, MATCH_SSINCP, MASK_SSINCP, MATCH_SSRDP, MASK_SSRDP, MATCH_C_SSPUSH, MASK_C_SSPUSH, MATCH_C_SSPOPCHK, MASK_C_SSPOPCHK, MATCH_C_SSINCP, MASK_C_SSINCP): New. (CSR_SSP): New. * opcode/riscv.h (enum riscv_insn_class): Add new instruction class INSN_CLASS_ZICFISS. opcodes/ChangeLog: * riscv-opc.c (match_rd_eq_1_or_5, match_rs1_eq_1_or_5, match_rs2_eq_1_or_5): New. (riscv_opcodes): Add 'Zicfiss' instructions and aliases.
1 parent 23722f7 commit 2f2e4bb

32 files changed

+319
-0
lines changed

bfd/elfxx-riscv.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,9 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
11481148
{"zhinx", "zhinxmin", check_implicit_always},
11491149
{"zhinxmin", "zfinx", check_implicit_always},
11501150
{"zfinx", "zicsr", check_implicit_always},
1151+
{"zicfiss", "zicsr", check_implicit_always},
1152+
{"zicfiss", "zimop", check_implicit_always},
1153+
{"zicfiss", "zcmop", check_implicit_always},
11511154
{"zk", "zkn", check_implicit_always},
11521155
{"zk", "zkr", check_implicit_always},
11531156
{"zk", "zkt", check_implicit_always},
@@ -1192,6 +1195,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
11921195
{"ssstateen", "zicsr", check_implicit_always},
11931196
{"sstc", "zicsr", check_implicit_always},
11941197
{"svadu", "zicsr", check_implicit_always},
1198+
/* Complex implications (that should be checked after others). */
1199+
/* Tail of the list. */
11951200
{NULL, NULL, NULL}
11961201
};
11971202

@@ -1252,6 +1257,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
12521257
{"zicbom", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12531258
{"zicbop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12541259
{"zicboz", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
1260+
{"zicfiss", ISA_SPEC_CLASS_DRAFT, 0, 3, 0 },
12551261
{"zicond", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12561262
{"zicsr", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
12571263
{"zicsr", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
@@ -2392,6 +2398,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
23922398
return riscv_subset_supports (rps, "zicbop");
23932399
case INSN_CLASS_ZICBOZ:
23942400
return riscv_subset_supports (rps, "zicboz");
2401+
case INSN_CLASS_ZICFISS:
2402+
return riscv_subset_supports (rps, "zicfiss");
23952403
case INSN_CLASS_ZICOND:
23962404
return riscv_subset_supports (rps, "zicond");
23972405
case INSN_CLASS_ZICSR:
@@ -2599,6 +2607,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
25992607
return "zicbop";
26002608
case INSN_CLASS_ZICBOZ:
26012609
return "zicboz";
2610+
case INSN_CLASS_ZICFISS:
2611+
return "zicfiss";
26022612
case INSN_CLASS_ZICOND:
26032613
return "zicond";
26042614
case INSN_CLASS_ZICSR:

gas/config/tc-riscv.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ enum riscv_csr_class
6767
CSR_CLASS_I,
6868
CSR_CLASS_I_32, /* rv32 only */
6969
CSR_CLASS_F, /* f-ext only */
70+
CSR_CLASS_ZICFISS, /* Zicfiss only */
7071
CSR_CLASS_ZKR, /* zkr only */
7172
CSR_CLASS_V, /* rvv only */
7273
CSR_CLASS_DEBUG, /* debug CSR */
@@ -1042,6 +1043,9 @@ riscv_csr_address (const char *csr_name,
10421043
case CSR_CLASS_F:
10431044
extension = "f";
10441045
break;
1046+
case CSR_CLASS_ZICFISS:
1047+
extension = "zicfiss";
1048+
break;
10451049
case CSR_CLASS_ZKR:
10461050
extension = "zkr";
10471051
break;

gas/testsuite/gas/riscv/csr-dw-regnums.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ Contents of the .* section:
403403
DW_CFA_offset_extended_sf: r4445 \(stimecmph\) at cfa\+1396
404404
DW_CFA_offset_extended_sf: r4685 \(vstimecmp\) at cfa\+2356
405405
DW_CFA_offset_extended_sf: r4701 \(vstimecmph\) at cfa\+2420
406+
DW_CFA_offset_extended_sf: r4113 \(ssp\) at cfa\+68
406407
DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
407408
DW_CFA_offset_extended_sf: r4419 \(stval\) at cfa\+1292
408409
DW_CFA_offset_extended_sf: r4480 \(satp\) at cfa\+1536

gas/testsuite/gas/riscv/csr-dw-regnums.s

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,8 @@ _start:
405405
.cfi_offset stimecmph, 1396
406406
.cfi_offset vstimecmp, 2356
407407
.cfi_offset vstimecmph, 2420
408+
# Zicfiss extension
409+
.cfi_offset ssp, 68
408410
# dropped
409411
.cfi_offset ubadaddr, 268 # aliases
410412
.cfi_offset sbadaddr, 1292 # aliases

gas/testsuite/gas/riscv/csr-version-1p10.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,3 +895,5 @@ Disassembly of section .text:
895895
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
896896
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
897897
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
898+
[ ]+[0-9a-f]+:[ ]+01102573[ ]+csrr[ ]+a0,ssp
899+
[ ]+[0-9a-f]+:[ ]+01159073[ ]+csrw[ ]+ssp,a1

gas/testsuite/gas/riscv/csr-version-1p10.l

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,3 +1613,7 @@
16131613
.*Info: macro .*
16141614
.*Warning: read-only CSR is written `csrw vlenb,a1'
16151615
.*Info: macro .*
1616+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1617+
.*Info: macro .*
1618+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1619+
.*Info: macro .*

gas/testsuite/gas/riscv/csr-version-1p11.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,3 +895,5 @@ Disassembly of section .text:
895895
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
896896
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
897897
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
898+
[ ]+[0-9a-f]+:[ ]+01102573[ ]+csrr[ ]+a0,ssp
899+
[ ]+[0-9a-f]+:[ ]+01159073[ ]+csrw[ ]+ssp,a1

gas/testsuite/gas/riscv/csr-version-1p11.l

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,3 +1609,7 @@
16091609
.*Info: macro .*
16101610
.*Warning: read-only CSR is written `csrw vlenb,a1'
16111611
.*Info: macro .*
1612+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1613+
.*Info: macro .*
1614+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1615+
.*Info: macro .*

gas/testsuite/gas/riscv/csr-version-1p12.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,3 +895,5 @@ Disassembly of section .text:
895895
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
896896
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
897897
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
898+
[ ]+[0-9a-f]+:[ ]+01102573[ ]+csrr[ ]+a0,ssp
899+
[ ]+[0-9a-f]+:[ ]+01159073[ ]+csrw[ ]+ssp,a1

gas/testsuite/gas/riscv/csr-version-1p12.l

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,3 +1373,7 @@
13731373
.*Info: macro .*
13741374
.*Warning: read-only CSR is written `csrw vlenb,a1'
13751375
.*Info: macro .*
1376+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1377+
.*Info: macro .*
1378+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1379+
.*Info: macro .*

0 commit comments

Comments
 (0)