diff options
Diffstat (limited to 'cpukit/score/cpu/arm/arm_exc_interrupt.S')
-rw-r--r-- | cpukit/score/cpu/arm/arm_exc_interrupt.S | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/arm_exc_interrupt.S b/cpukit/score/cpu/arm/arm_exc_interrupt.S index daa7038b0f..2f5079d4df 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 /* @@ -140,6 +149,9 @@ _ARMV4_Exception_interrupt: mov sp, NON_VOLATILE_SCRATCH /* Save CPSR in non-volatile register */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #4 +#endif mrs NON_VOLATILE_SCRATCH, CPSR /* Decrement levels and determine thread dispatch state */ @@ -161,6 +173,9 @@ _ARMV4_Exception_interrupt: bne .Lthread_dispatch_done /* Thread dispatch */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #4 +#endif mrs NON_VOLATILE_SCRATCH, CPSR .Ldo_thread_dispatch: @@ -178,6 +193,9 @@ _ARMV4_Exception_interrupt: BLX_TO_THUMB_1 _Thread_Do_dispatch /* Disable interrupts */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #5 +#endif msr CPSR, NON_VOLATILE_SCRATCH #ifdef RTEMS_SMP @@ -220,10 +238,16 @@ _ARMV4_Exception_interrupt: 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 */ @@ -234,6 +258,9 @@ _ARMV4_Exception_interrupt: /* 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 */ @@ -267,6 +294,9 @@ _ARMV4_Exception_interrupt: #endif /* Return from interrupt */ +#ifdef RTEMS_PARAVIRT_XTRATUM + udf #10 +#endif subs pc, lr, #4 #ifdef RTEMS_PROFILING |