summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-01-14 09:54:21 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-01-14 10:48:06 +0100
commit0cce75e6960df9e53183be459b51ee7bef0ce4cc (patch)
tree87ef437358a904036d0e56c7652f441e5081229e
parentbsp/virtex5: Fix define location (diff)
downloadrtems-0cce75e6960df9e53183be459b51ee7bef0ce4cc.tar.bz2
NIOS2: Fix register restore sequence in epilogue
This fix is critical. The previous implementation leads to system corruption.
-rw-r--r--cpukit/score/cpu/nios2/nios2-eic-il-low-level.S6
1 files changed, 3 insertions, 3 deletions
diff --git a/cpukit/score/cpu/nios2/nios2-eic-il-low-level.S b/cpukit/score/cpu/nios2/nios2-eic-il-low-level.S
index 42da434da6..f214f4ddef 100644
--- a/cpukit/score/cpu/nios2/nios2-eic-il-low-level.S
+++ b/cpukit/score/cpu/nios2/nios2-eic-il-low-level.S
@@ -160,7 +160,6 @@ do_thread_dispatch:
ldw r10, FRAME_OFFSET_R10(sp)
ldw r11, FRAME_OFFSET_R11(sp)
ldw r12, FRAME_OFFSET_R12(sp)
- ldw r13, FRAME_OFFSET_R13(sp)
/*
* Disable interrupts.
@@ -180,15 +179,16 @@ do_thread_dispatch:
wrctl status, r15
/* Load thread dispatch necessary */
- ldb r12, %gprel(_Per_CPU_Information + PER_CPU_DISPATCH_NEEDED)(gp)
+ ldb r13, %gprel(_Per_CPU_Information + PER_CPU_DISPATCH_NEEDED)(gp)
/* Is thread dispatch necessary? */
- bne r12, zero, enable_interrupts_before_thread_dispatch
+ bne r13, zero, enable_interrupts_before_thread_dispatch
/* Enable Nios II specific thread dispatch */
stw zero, %gprel(_Nios2_Thread_dispatch_disabled)(gp)
/* Restore remaining volatile register */
+ ldw r13, FRAME_OFFSET_R13(sp)
ldw r14, FRAME_OFFSET_R14(sp)
ldw r15, FRAME_OFFSET_R15(sp)