summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/platform/ring0/entry_arm64.s
diff options
context:
space:
mode:
authorBin Lu <bin.lu@arm.com>2020-01-29 07:50:34 -0500
committerBin Lu <bin.lu@arm.com>2020-01-29 07:50:38 -0500
commit6adbdfe232c3da42a7f6f3a7d882d140196e4068 (patch)
tree083220be2231af200e17507fb489da91f8769f09 /pkg/sentry/platform/ring0/entry_arm64.s
parent4cb55a7a3b09c430fa2b7197fdc7b84b7e88a6ed (diff)
supporting sError in guest kernel on Arm64
For test case 'TestBounce', we use KVM_SET_VCPU_EVENTS to trigger sError to leave guest. Signed-off-by: Bin Lu <bin.lu@arm.com>
Diffstat (limited to 'pkg/sentry/platform/ring0/entry_arm64.s')
-rw-r--r--pkg/sentry/platform/ring0/entry_arm64.s14
1 files changed, 13 insertions, 1 deletions
diff --git a/pkg/sentry/platform/ring0/entry_arm64.s b/pkg/sentry/platform/ring0/entry_arm64.s
index 679842288..baa6c4910 100644
--- a/pkg/sentry/platform/ring0/entry_arm64.s
+++ b/pkg/sentry/platform/ring0/entry_arm64.s
@@ -601,7 +601,19 @@ TEXT ·El0_fiq(SB),NOSPLIT,$0
B ·Shutdown(SB)
TEXT ·El0_error(SB),NOSPLIT,$0
- B ·Shutdown(SB)
+ KERNEL_ENTRY_FROM_EL0
+ WORD $0xd538d092 //MRS TPIDR_EL1, R18
+ WORD $0xd538601a //MRS FAR_EL1, R26
+
+ MOVD R26, CPU_FAULT_ADDR(RSV_REG)
+
+ MOVD $1, R3
+ MOVD R3, CPU_ERROR_TYPE(RSV_REG) // Set error type to user.
+
+ MOVD $VirtualizationException, R3
+ MOVD R3, CPU_VECTOR_CODE(RSV_REG)
+
+ B ·Halt(SB)
TEXT ·El0_sync_invalid(SB),NOSPLIT,$0
B ·Shutdown(SB)