xen/arm32: entry: Document the purpose of r11 in the traps handler

It took me a bit of time to understand why __DEFINE_TRAP_ENTRY is
storing the original stack pointer in r11. It is working in pair with
return_traps_entry where sp will be restored from r11.

This is fine because per the AAPCS r11 must be preserved by the
subroutine. So in return_from_trap, r11 will still contain the original
stack pointer.

Add some documentation in the code to point the 2 sides to each other.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
(cherry picked from commit dd855aa430)
This commit is contained in:
Julien Grall authored and Stefano Stabellini committed 2018-02-07 11:49:06 -08:00
1 parent 1105f3a92d
commit 11875b7d57
1 file changed
+8
+8
View File
@@ -127,6 +127,10 @@ trap_##trap: \
cpsie iflags; \
adr lr, return_from_trap; \
mov r0, sp; \
/* \
* Save the stack pointer in r11. It will be restored after the \
* trap has been handled (see return_from_trap). \
*/ \
mov r11, sp; \
bic sp, #7; /* Align the stack pointer (noop on guest trap) */ \
b do_trap_##trap
@@ -217,6 +221,10 @@ DEFINE_TRAP_ENTRY_NOIRQ(irq)
DEFINE_TRAP_ENTRY_NOIRQ(fiq)
return_from_trap:
/*
* Restore the stack pointer from r11. It was saved on exception
* entry (see __DEFINE_TRAP_ENTRY).
*/
mov sp, r11
ENTRY(return_to_new_vcpu32)
ldr r11, [sp, #UREGS_cpsr]
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.