diff options
Diffstat (limited to 'cpukit/score/cpu/arm/arm_exc_abort.S')
-rw-r--r-- | cpukit/score/cpu/arm/arm_exc_abort.S | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/cpukit/score/cpu/arm/arm_exc_abort.S b/cpukit/score/cpu/arm/arm_exc_abort.S index 59ab5d2988..f4cf6724b8 100644 --- a/cpukit/score/cpu/arm/arm_exc_abort.S +++ b/cpukit/score/cpu/arm/arm_exc_abort.S @@ -28,13 +28,13 @@ #ifdef ARM_MULTILIB_ARCH_V4 -.extern rtems_fatal_error_occurred +.extern _ARM_Exception_default -.globl arm_exc_data_abort_set_handler -.globl arm_exc_data_abort +.globl _ARMV4_Exception_data_abort_set_handler +.globl _ARMV4_Exception_data_abort -.globl arm_exc_prefetch_abort_set_handler -.globl arm_exc_prefetch_abort +.globl _ARMV4_Exception_prefetch_abort_set_handler +.globl _ARMV4_Exception_prefetch_abort .section ".bss" @@ -50,7 +50,7 @@ prefetch_abort_handler: .thumb_func #endif -arm_exc_data_abort_set_handler: +_ARMV4_Exception_data_abort_set_handler: ldr r1, =data_abort_handler str r0, [r1] #ifdef __thumb__ @@ -63,7 +63,7 @@ arm_exc_data_abort_set_handler: .thumb_func #endif -arm_exc_prefetch_abort_set_handler: +_ARMV4_Exception_prefetch_abort_set_handler: ldr r1, =prefetch_abort_handler str r0, [r1] #ifdef __thumb__ @@ -74,20 +74,22 @@ arm_exc_prefetch_abort_set_handler: .arm -arm_exc_prefetch_abort: +_ARMV4_Exception_prefetch_abort: /* Save context and load handler */ - sub sp, #16 + sub sp, #20 stmdb sp!, {r0-r12} + mov r4, #3 ldr r6, =prefetch_abort_handler b save_more_context -arm_exc_data_abort: +_ARMV4_Exception_data_abort: /* Save context and load handler */ - sub sp, #16 + sub sp, #20 stmdb sp!, {r0-r12} + mov r4, #4 ldr r6, =data_abort_handler save_more_context: @@ -95,22 +97,21 @@ save_more_context: /* Save more context */ mov r2, lr mrs r3, spsr - mrs r4, cpsr + mrs r7, cpsr orr r5, r3, #ARM_PSR_I bic r5, #ARM_PSR_T msr cpsr, r5 mov r0, sp mov r1, lr - msr cpsr, r4 - add r5, sp, #68 - stmdb r5!, {r0-r3} + msr cpsr, r7 + add r5, sp, #72 + stmdb r5!, {r0-r4} /* Call high level handler */ ldr r2, [r6] cmp r2, #0 - ldreq r2, =rtems_fatal_error_occurred - movne r0, sp - moveq r0, #0xaa + ldreq r2, =_ARM_Exception_default + mov r0, sp #ifndef __thumb__ mov lr, pc mov pc, r2 @@ -121,11 +122,11 @@ save_more_context: #endif /* __thumb__ */ /* Restore context */ - ldmia r5!, {r0-r3} + ldmia r5!, {r0-r4} mov lr, r2 msr spsr, r3 ldmia sp!, {r0-r12} - add sp, #16 + add sp, #20 /* Return from interrupt */ subs pc, lr, #8 |