blob: 86aa055a0597a1fcfd00966815dbbf49333bffed (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
AArch64 emulation ignores SPSel=0 when taking (or returning from) an exception at EL1 or greater
The AArch64 emulation ignores SPSel=0 when:
(1) taking an interrupt from an exception level greater than EL0 (e.g., EL1t),
(2) returning from an exception (via ERET) to an exception level greater than EL0 (e.g., EL1t), with SPSR_ELx[SPSel]=0.
The attached patch fixes the problem in my application.
Background:
I'm running a standalone application (toy OS) that is performing preemptive multithreading between threads running at EL1t, with exception handling / context switching occurring at EL1h. This bug causes the stack pointer to be corrupted in the threads running at EL1t (they end up with a version of the EL1h stack pointer (SP_EL1)).
Occurs in:
qemu-2.1.0-rc1 (found in)
commit c60a57ff497667780132a3fcdc1500c83af5d5c0 (current master)
|