diff options
Diffstat (limited to 'cpukit/score/cpu/arm/arm_exc_interrupt.S')
-rw-r--r-- | cpukit/score/cpu/arm/arm_exc_interrupt.S | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/arm_exc_interrupt.S b/cpukit/score/cpu/arm/arm_exc_interrupt.S index fcb1510b95..2a3a3723bd 100644 --- a/cpukit/score/cpu/arm/arm_exc_interrupt.S +++ b/cpukit/score/cpu/arm/arm_exc_interrupt.S @@ -57,12 +57,21 @@ _ARMV4_Exception_interrupt: /* Set exchange registers */ mov EXCHANGE_LR, lr +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #4 +#endif mrs EXCHANGE_SPSR, SPSR +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #4 +#endif mrs EXCHANGE_CPSR, CPSR sub EXCHANGE_INT_SP, sp, #EXCHANGE_SIZE /* Switch to SVC mode */ orr EXCHANGE_CPSR, EXCHANGE_CPSR, #0x1 +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #5 +#endif msr CPSR_c, EXCHANGE_CPSR /* @@ -190,10 +199,16 @@ thread_dispatch_done: add sp, #CONTEXT_SIZE /* Get INT mode program status register */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #4 +#endif mrs r1, CPSR bic r1, r1, #0x1 /* Switch to INT mode */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #5 +#endif msr CPSR_c, r1 /* Save EXCHANGE_LR and EXCHANGE_SPSR registers to exchange area */ @@ -204,6 +219,9 @@ thread_dispatch_done: /* Set return address and program status */ mov lr, EXCHANGE_LR +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #5 +#endif msr SPSR_fsxc, EXCHANGE_SPSR /* Restore EXCHANGE_LR and EXCHANGE_SPSR registers from exchange area */ @@ -237,6 +255,9 @@ thread_dispatch_done: #endif /* Return from interrupt */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #10 +#endif subs pc, lr, #4 #endif /* ARM_MULTILIB_ARCH_V4 */ |