arch: arm: aarch32: Rework non-Cortex-M context preservation
The current context preservation implementation saves the spsr and lr_irq registers, which contain the cpsr and pc register values of the interrupted context, in the thread callee-saved block and this prevents nesting of interrupts because these values are required to be part of the exception stack frame to preserve the nested interrupt context. This commit reworks the AArch32 non-Cortex-M context preservation implementation to save the spsr and lr_irq registers in the exception stack frame to allow preservation of the nested interrupt context as well as the interrupted thread context. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
This commit is contained in:
parent
cc680a83dd
commit
b63a028fbc
7 changed files with 108 additions and 70 deletions
|
@ -31,13 +31,7 @@ struct _callee_saved {
|
|||
u32_t v6; /* r9 */
|
||||
u32_t v7; /* r10 */
|
||||
u32_t v8; /* r11 */
|
||||
#if defined(CONFIG_CPU_CORTEX_R)
|
||||
u32_t spsr;/* r12 */
|
||||
u32_t psp; /* r13 */
|
||||
u32_t lr; /* r14 */
|
||||
#else
|
||||
u32_t psp; /* r13 */
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct _callee_saved _callee_saved_t;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue