|
@@ -26,8 +26,11 @@
|
|
|
|
|
|
#define HANDLE_EXCEPTION \
|
|
#define HANDLE_EXCEPTION \
|
|
l.addi r1, r1, -EXCEPTION_STACK_SIZE ;\
|
|
l.addi r1, r1, -EXCEPTION_STACK_SIZE ;\
|
|
|
|
+ l.sw 0x00(r1), r2 ;\
|
|
l.sw 0x1c(r1), r9 ;\
|
|
l.sw 0x1c(r1), r9 ;\
|
|
- l.jal _exception_handler ;\
|
|
|
|
|
|
+ l.movhi r2,hi(_exception_handler) ;\
|
|
|
|
+ l.ori r2,r2,lo(_exception_handler) ;\
|
|
|
|
+ l.jalr r2 ;\
|
|
l.nop ;\
|
|
l.nop ;\
|
|
l.lwz r9, 0x1c(r1) ;\
|
|
l.lwz r9, 0x1c(r1) ;\
|
|
l.addi r1, r1, EXCEPTION_STACK_SIZE ;\
|
|
l.addi r1, r1, EXCEPTION_STACK_SIZE ;\
|
|
@@ -79,8 +82,9 @@ __reset:
|
|
l.bnf .L_relocvectors
|
|
l.bnf .L_relocvectors
|
|
l.addi r4,r4, 4
|
|
l.addi r4,r4, 4
|
|
#endif
|
|
#endif
|
|
-
|
|
|
|
- l.j _start
|
|
|
|
|
|
+ l.movhi r4,hi(_start)
|
|
|
|
+ l.ori r4,r4,lo(_start)
|
|
|
|
+ l.jr r4
|
|
l.nop
|
|
l.nop
|
|
|
|
|
|
/* bus error */
|
|
/* bus error */
|
|
@@ -262,8 +266,7 @@ _start:
|
|
.type _exception_handler,@function
|
|
.type _exception_handler,@function
|
|
|
|
|
|
_exception_handler:
|
|
_exception_handler:
|
|
- /* Store state (r9 already saved)*/
|
|
|
|
- l.sw 0x00(r1), r2
|
|
|
|
|
|
+ /* Store state (r2 and r9 already saved)*/
|
|
l.sw 0x04(r1), r3
|
|
l.sw 0x04(r1), r3
|
|
l.sw 0x08(r1), r4
|
|
l.sw 0x08(r1), r4
|
|
l.sw 0x0c(r1), r5
|
|
l.sw 0x0c(r1), r5
|