mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 05:37:54 +00:00
hw: use eret
in hyp
mode to switch mode
Instead of using `cps` instruction, use an exception return instruction to switch from `hyp` mode to `svc` mode. Otherwise it causes unpredicted behaviour on ARM. Fix #3284
This commit is contained in:
parent
c433f87000
commit
f074954d3d
@ -157,7 +157,14 @@ _vm_to_host:
|
||||
mcr p15, 0, r9, c2, c0, 2 /* write TTBRC */
|
||||
mcr p15, 0, r10, c10, c2, 0 /* write MAIR0 */
|
||||
mcr p15, 0, r11, c3, c0, 0 /* write DACR */
|
||||
cps #SVC_MODE
|
||||
mov r10, #7
|
||||
lsl r10, #6
|
||||
add r10, r10, #SVC_MODE
|
||||
msr spsr_cxsf, r10
|
||||
adr r10, _svc_mode_ret
|
||||
msr ELR_hyp, r10
|
||||
eret
|
||||
_svc_mode_ret:
|
||||
stmia r0, {r13-r14}^ /* save user regs sp,lr */
|
||||
add r0, r0, #2*4
|
||||
stmia r0!, {r1-r2} /* save ip, cpsr */
|
||||
|
Loading…
Reference in New Issue
Block a user