aarch64: Add GCS system registers.

This patch adds support for 10 new AArch64 system registers
(gcscre0_el1, gcscr_el1, gcscr_el12, gcscr_el2, gcscr_el3,
gcspr_el0, gcspr_el1 ,gcspr_el12, gcspr_el2 and gcspr_el3),
which are enabled on using Guarded Control Stack (+gcs flag)
feature.
This commit is contained in:
Srinath Parvathaneni 2023-11-02 13:10:37 +00:00 committed by srinath
parent c58f84d899
commit 486b7204e9
5 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,3 @@
#as: -march=armv8-a
#source: gcs-sysregs.s
#error_output: gcs-sysregs-bad.l

View File

@ -0,0 +1,21 @@
[^:]*: Assembler messages:
.*: Error: selected processor does not support system register name 'gcscr_el1'
.*: Error: selected processor does not support system register name 'gcscr_el1'
.*: Error: selected processor does not support system register name 'gcspr_el1'
.*: Error: selected processor does not support system register name 'gcspr_el1'
.*: Error: selected processor does not support system register name 'gcscr_el2'
.*: Error: selected processor does not support system register name 'gcscr_el2'
.*: Error: selected processor does not support system register name 'gcspr_el2'
.*: Error: selected processor does not support system register name 'gcspr_el2'
.*: Error: selected processor does not support system register name 'gcscr_el3'
.*: Error: selected processor does not support system register name 'gcscr_el3'
.*: Error: selected processor does not support system register name 'gcspr_el3'
.*: Error: selected processor does not support system register name 'gcspr_el3'
.*: Error: selected processor does not support system register name 'gcspr_el0'
.*: Error: selected processor does not support system register name 'gcspr_el0'
.*: Error: selected processor does not support system register name 'gcspr_el12'
.*: Error: selected processor does not support system register name 'gcspr_el12'
.*: Error: selected processor does not support system register name 'gcscr_el12'
.*: Error: selected processor does not support system register name 'gcscr_el12'
.*: Error: selected processor does not support system register name 'gcscre0_el1'
.*: Error: selected processor does not support system register name 'gcscre0_el1'

View File

@ -0,0 +1,29 @@
#name: Test of Guarded Control Stack system registers
#as: -march=armv8.8-a+gcs
#objdump: -dr
.*: file format .*
Disassembly of section \.text:
0+ <.*>:
.*: d5182500 msr gcscr_el1, x0
.*: d538251e mrs x30, gcscr_el1
.*: d5182520 msr gcspr_el1, x0
.*: d538253e mrs x30, gcspr_el1
.*: d51c2500 msr gcscr_el2, x0
.*: d53c251e mrs x30, gcscr_el2
.*: d51c2520 msr gcspr_el2, x0
.*: d53c253e mrs x30, gcspr_el2
.*: d51e2500 msr gcscr_el3, x0
.*: d53e251e mrs x30, gcscr_el3
.*: d51e2520 msr gcspr_el3, x0
.*: d53e253e mrs x30, gcspr_el3
.*: d51b2520 msr gcspr_el0, x0
.*: d53b253e mrs x30, gcspr_el0
.*: d51d2520 msr gcspr_el12, x0
.*: d53d253e mrs x30, gcspr_el12
.*: d51d2500 msr gcscr_el12, x0
.*: d53d251e mrs x30, gcscr_el12
.*: d5182540 msr gcscre0_el1, x0
.*: d538255e mrs x30, gcscre0_el1

View File

@ -0,0 +1,20 @@
msr gcscr_el1, x0
mrs x30, gcscr_el1
msr gcspr_el1, x0
mrs x30, gcspr_el1
msr gcscr_el2, x0
mrs x30, gcscr_el2
msr gcspr_el2, x0
mrs x30, gcspr_el2
msr gcscr_el3, x0
mrs x30, gcscr_el3
msr gcspr_el3, x0
mrs x30, gcspr_el3
msr gcspr_el0, x0
mrs x30, gcspr_el0
msr gcspr_el12, x0
mrs x30, gcspr_el12
msr gcscr_el12, x0
mrs x30, gcscr_el12
msr gcscre0_el1, x0
mrs x30, gcscre0_el1

View File

@ -419,6 +419,16 @@
SYSREG ("fpcr", CPENC (3,3,4,4,0), 0, AARCH64_NO_FEATURES)
SYSREG ("fpexc32_el2", CPENC (3,4,5,3,0), 0, AARCH64_NO_FEATURES)
SYSREG ("fpsr", CPENC (3,3,4,4,1), 0, AARCH64_NO_FEATURES)
SYSREG ("gcspr_el0", CPENC (3,3,2,5,1), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcspr_el1", CPENC (3,0,2,5,1), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcspr_el2", CPENC (3,4,2,5,1), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcspr_el12", CPENC (3,5,2,5,1), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcspr_el3", CPENC (3,6,2,5,1), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcscre0_el1", CPENC (3,0,2,5,2), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcscr_el1", CPENC (3,0,2,5,0), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcscr_el2", CPENC (3,4,2,5,0), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcscr_el12", CPENC (3,5,2,5,0), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcscr_el3", CPENC (3,6,2,5,0), F_ARCHEXT, AARCH64_FEATURE (GCS))
SYSREG ("gcr_el1", CPENC (3,0,1,0,6), F_ARCHEXT, AARCH64_FEATURE (MEMTAG))
SYSREG ("gmid_el1", CPENC (3,1,0,0,4), F_REG_READ|F_ARCHEXT, AARCH64_FEATURE (MEMTAG))
SYSREG ("gpccr_el3", CPENC (3,6,2,1,6), 0, AARCH64_NO_FEATURES)