Preserve x19-x29 across world switch for exception handling
Previously exception handlers in BL3-1, X19-X29 were not saved and restored on every SMC/trap into EL3. Instead these registers were 'saved as needed' as a side effect of the A64 ABI used by the C compiler. That approach failed when world switching but was not visible with the TSP/TSPD code because the TSP is 64-bit, did not clobber these registers when running and did not support pre-emption by normal world interrupts. These scenarios showed that the values in these registers can be passed through a world switch, which broke the normal and trusted world assumptions about these registers being preserved. The Ideal solution saves and restores these registers when a world switch occurs - but that type of implementation is more complex. So this patch always saves and restores these registers on entry and exit of EL3. Fixes ARM-software/tf-issues#141 Change-Id: I9a727167bbc594454e81cf78a97ca899dfb11c27
WIP_v2.3-LS
master
v2.2-LS
v2.4-LS
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.3
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.2
v2.1-rc1
v2.1-rc0
v2.1
v2.0-rc0
v2.0
v1.6-rc1
v1.6-rc0
v1.6
v1.5-rc3
v1.5-rc2
v1.5-rc1
v1.5-rc0
v1.5
v1.4-rc0
v1.4
v1.3_rc2
v1.3_rc1
v1.3-rc0
v1.3
v1.2-rc0
v1.2
v1.1-rc3
v1.1-rc2
v1.1-rc1
v1.1-rc0
v1.1-Juno-0.1
v1.1
v1.0-rc0
v1.0
v0.4-rc2
v0.4-rc1
v0.4-Juno-0.6-rc1
v0.4-Juno-0.6-rc0
v0.4-Juno-0.5-rc1
v0.4-Juno-0.5-rc0
v0.4-Juno-0.5
v0.4-Juno-0.4-rc0
v0.4-Juno-0.4
v0.4
for-v0.4/05.22
for-v0.4/05.21
for-v0.4/05.20
for-v0.4-rc0
|
---|
|
bl31/aarch64/bl31_entrypoint.S |
---|
bl31/aarch64/runtime_exceptions.S |
---|
include/bl31/cm_macros.S |
---|
include/bl31/context.h |
---|
services/std_svc/psci/psci_entry.S |
---|