summaryrefslogtreecommitdiffstats
path: root/cpu/74xx_7xx
diff options
context:
space:
mode:
Diffstat (limited to 'cpu/74xx_7xx')
-rw-r--r--cpu/74xx_7xx/start.S21
1 files changed, 19 insertions, 2 deletions
diff --git a/cpu/74xx_7xx/start.S b/cpu/74xx_7xx/start.S
index fe08f8e837..0d63144356 100644
--- a/cpu/74xx_7xx/start.S
+++ b/cpu/74xx_7xx/start.S
@@ -177,7 +177,14 @@ SystemCall:
add r11,r11,r0
lwz r11,0(r11)
- li r12,0xd00-4*3 /* save LR & SRRx */
+ li r20,0xd00-4 /* Get stack pointer */
+ lwz r12,0(r20)
+ subi r12,r12,12 /* Adjust stack pointer */
+ li r0,0xc00+_end_back-SystemCall
+ cmplw 0, r0, r12 /* Check stack overflow */
+ bgt 1f
+ stw r12,0(r20)
+
mflr r0
stw r0,0(r12)
mfspr r0,SRR0
@@ -202,7 +209,9 @@ _back:
mtmsr r11
SYNC
- li r12,0xd00-4*3 /* restore regs */
+ li r12,0xd00-4 /* restore regs */
+ lwz r12,0(r12)
+
lwz r11,0(r12)
mtlr r11
lwz r11,4(r12)
@@ -210,8 +219,13 @@ _back:
lwz r11,8(r12)
mtspr SRR1,r11
+ addi r12,r12,12 /* Adjust stack pointer */
+ li r20,0xd00-4
+ stw r12,0(r20)
+
SYNC
rfi
+_end_back:
STD_EXCEPTION(0xd00, SingleStep, UnknownException)
@@ -716,6 +730,9 @@ in_ram:
bne 5b
6:
mr r3, r10 /* Destination Address */
+#ifdef CONFIG_AMIGAONEG3SE
+ mr r4, r9 /* Use RAM copy of the global data */
+#endif
bl after_reloc
/* not reached - end relocate_code */