summaryrefslogtreecommitdiff
path: root/cpukit/score/cpu/arm/arm_exc_interrupt.S
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/cpu/arm/arm_exc_interrupt.S')
-rw-r--r--cpukit/score/cpu/arm/arm_exc_interrupt.S30
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