Merge pull request #4535 from lubinszARM:pr_kvm_exec_binary_1

PiperOrigin-RevId: 338321125
This commit is contained in:
gVisor bot 2020-10-21 12:53:11 -07:00
commit 1b2097f84e
2 changed files with 18 additions and 21 deletions

View File

@ -235,8 +235,9 @@ func (c *vCPU) SwitchToUser(switchOpts ring0.SwitchOpts, info *arch.SignalInfo)
return c.fault(int32(syscall.SIGSEGV), info)
case ring0.Vector(bounce): // ring0.VirtualizationException
return usermem.NoAccess, platform.ErrContextInterrupt
case ring0.El0Sync_undef,
ring0.El1Sync_undef:
case ring0.El0Sync_undef:
return c.fault(int32(syscall.SIGILL), info)
case ring0.El1Sync_undef:
*info = arch.SignalInfo{
Signo: int32(syscall.SIGILL),
Code: 1, // ILL_ILLOPC (illegal opcode).

View File

@ -366,6 +366,19 @@
MOVD R4, CPU_REGISTERS+PTRACE_SP(RSV_REG); \
LOAD_KERNEL_STACK(RSV_REG); // Load the temporary stack.
// EXCEPTION_WITH_ERROR is a common exception handler function.
#define EXCEPTION_WITH_ERROR(user, vector) \
WORD $0xd538d092; \ //MRS TPIDR_EL1, R18
WORD $0xd538601a; \ //MRS FAR_EL1, R26
MOVD R26, CPU_FAULT_ADDR(RSV_REG); \
MOVD $user, R3; \
MOVD R3, CPU_ERROR_TYPE(RSV_REG); \ // Set error type to user.
MOVD $vector, R3; \
MOVD R3, CPU_VECTOR_CODE(RSV_REG); \
MRS ESR_EL1, R3; \
MOVD R3, CPU_ERROR_CODE(RSV_REG); \
B ·kernelExitToEl1(SB);
// storeAppASID writes the application's asid value.
TEXT ·storeAppASID(SB),NOSPLIT,$0-8
MOVD asid+0(FP), R1
@ -659,21 +672,7 @@ el0_svc:
el0_da:
el0_ia:
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 $PageFault, R3
MOVD R3, CPU_VECTOR_CODE(RSV_REG)
MRS ESR_EL1, R3
MOVD R3, CPU_ERROR_CODE(RSV_REG)
B ·kernelExitToEl1(SB)
EXCEPTION_WITH_ERROR(1, PageFault)
el0_fpsimd_acc:
B ·Shutdown(SB)
@ -688,10 +687,7 @@ el0_sp_pc:
B ·Shutdown(SB)
el0_undef:
MOVD $El0Sync_undef, R3
MOVD R3, CPU_VECTOR_CODE(RSV_REG)
B ·kernelExitToEl1(SB)
EXCEPTION_WITH_ERROR(1, El0Sync_undef)
el0_dbg:
B ·Shutdown(SB)