Skip to content

Commit 067da05

Browse files
committed
UNRATIFIED RISC-V: Add 'Zicfiss' extension and its TENTATIVE 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.1 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.1 (latest git revision): <riscv/riscv-cfi@c6a8311> **Note** Because CSR address is not fixed yet, this commit uses tentative one (a part of custom CSR space). bfd/ChangeLog: * elfxx-riscv.c (riscv_implicit_subsets): Add implication 'Zicfiss' -> 'Zicsr', 'A', '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-na.d: Likewise. * testsuite/gas/riscv/zicfiss-mop.s: New test for MOP encoding. * testsuite/gas/riscv/zicfiss-mop.d: Likewise. * 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. include/ChangeLog: * opcode/riscv-opc.h (MATCH_SSLOAD, MASK_SSLOAD, MATCH_SSPOPCHK, MASK_SSPOPCHK, MATCH_SSPINC, MASK_SSPINC, MATCH_SSPUSH, MASK_SSPUSH, MATCH_SSPRR, MASK_SSPRR, MATCH_SSAMOSWAP, MASK_SSAMOSWAP, MATCH_C_SSPUSH, MASK_C_SSPUSH, MATCH_C_SSPOPCHK, MASK_C_SSPOPCHK): New. (CSR_SSP): New. * opcode/riscv.h (enum riscv_insn_class): Add new instruction class INSN_CLASS_ZICFISS. opcodes/ChangeLog: * riscv-opc.c (match_rs1_nonzero, 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 ec3eb78 commit 067da05

24 files changed

+300
-0
lines changed

bfd/elfxx-riscv.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,10 @@ 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", "a", check_implicit_always},
1152+
{"zicfiss", "zicsr", check_implicit_always},
1153+
{"zicfiss", "zimop", check_implicit_always},
1154+
{"zicfiss", "zcmop", check_implicit_always},
11511155
{"zk", "zkn", check_implicit_always},
11521156
{"zk", "zkr", check_implicit_always},
11531157
{"zk", "zkt", check_implicit_always},
@@ -1190,6 +1194,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
11901194
{"sscofpmf", "zicsr", check_implicit_always},
11911195
{"ssstateen", "zicsr", check_implicit_always},
11921196
{"sstc", "zicsr", check_implicit_always},
1197+
/* Complex implications (that should be checked after others). */
1198+
/* Tail of the list. */
11931199
{NULL, NULL, NULL}
11941200
};
11951201

@@ -1250,6 +1256,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
12501256
{"zicbom", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12511257
{"zicbop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12521258
{"zicboz", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
1259+
{"zicfiss", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 },
12531260
{"zicond", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
12541261
{"zicsr", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
12551262
{"zicsr", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
@@ -2388,6 +2395,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
23882395
return riscv_subset_supports (rps, "zicbop");
23892396
case INSN_CLASS_ZICBOZ:
23902397
return riscv_subset_supports (rps, "zicboz");
2398+
case INSN_CLASS_ZICFISS:
2399+
return riscv_subset_supports (rps, "zicfiss");
23912400
case INSN_CLASS_ZICOND:
23922401
return riscv_subset_supports (rps, "zicond");
23932402
case INSN_CLASS_ZICSR:
@@ -2585,6 +2594,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
25852594
return "zicbop";
25862595
case INSN_CLASS_ZICBOZ:
25872596
return "zicboz";
2597+
case INSN_CLASS_ZICFISS:
2598+
return "zicfiss";
25882599
case INSN_CLASS_ZICOND:
25892600
return "zicond";
25902601
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 */
@@ -1040,6 +1041,9 @@ riscv_csr_address (const char *csr_name,
10401041
case CSR_CLASS_F:
10411042
extension = "f";
10421043
break;
1044+
case CSR_CLASS_ZICFISS:
1045+
extension = "zicfiss";
1046+
break;
10431047
case CSR_CLASS_ZKR:
10441048
extension = "zkr";
10451049
break;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ Contents of the .* section:
399399
DW_CFA_offset_extended_sf: r4445 \(stimecmph\) at cfa\+1396
400400
DW_CFA_offset_extended_sf: r4685 \(vstimecmp\) at cfa\+2356
401401
DW_CFA_offset_extended_sf: r4701 \(vstimecmph\) at cfa\+2420
402+
DW_CFA_offset_extended_sf: r6144 \(ssp\) at cfa\+8192
402403
DW_CFA_offset_extended_sf: r4163 \(utval\) at cfa\+268
403404
DW_CFA_offset_extended_sf: r4419 \(stval\) at cfa\+1292
404405
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
@@ -400,6 +400,8 @@ _start:
400400
.cfi_offset stimecmph, 1396
401401
.cfi_offset vstimecmp, 2356
402402
.cfi_offset vstimecmph, 2420
403+
# Zicfiss extension
404+
.cfi_offset ssp, 8192
403405
# dropped
404406
.cfi_offset ubadaddr, 268 # aliases
405407
.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
@@ -887,3 +887,5 @@ Disassembly of section .text:
887887
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
888888
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
889889
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
890+
[ ]+[0-9a-f]+:[ ]+80002573[ ]+csrr[ ]+a0,ssp
891+
[ ]+[0-9a-f]+:[ ]+80059073[ ]+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
@@ -1589,3 +1589,7 @@
15891589
.*Info: macro .*
15901590
.*Warning: read-only CSR is written `csrw vlenb,a1'
15911591
.*Info: macro .*
1592+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1593+
.*Info: macro .*
1594+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1595+
.*Info: macro .*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,3 +887,5 @@ Disassembly of section .text:
887887
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
888888
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
889889
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
890+
[ ]+[0-9a-f]+:[ ]+80002573[ ]+csrr[ ]+a0,ssp
891+
[ ]+[0-9a-f]+:[ ]+80059073[ ]+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
@@ -1585,3 +1585,7 @@
15851585
.*Info: macro .*
15861586
.*Warning: read-only CSR is written `csrw vlenb,a1'
15871587
.*Info: macro .*
1588+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1589+
.*Info: macro .*
1590+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1591+
.*Info: macro .*

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,3 +887,5 @@ Disassembly of section .text:
887887
[ ]+[0-9a-f]+:[ ]+c2159073[ ]+csrw[ ]+vtype,a1
888888
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
889889
[ ]+[0-9a-f]+:[ ]+c2259073[ ]+csrw[ ]+vlenb,a1
890+
[ ]+[0-9a-f]+:[ ]+80002573[ ]+csrr[ ]+a0,ssp
891+
[ ]+[0-9a-f]+:[ ]+80059073[ ]+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
@@ -1349,3 +1349,7 @@
13491349
.*Info: macro .*
13501350
.*Warning: read-only CSR is written `csrw vlenb,a1'
13511351
.*Info: macro .*
1352+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1353+
.*Info: macro .*
1354+
.*Warning: invalid CSR `ssp', needs `zicfiss' extension
1355+
.*Info: macro .*

0 commit comments

Comments
 (0)