Kernel/armv7 - Fixed error messages having invalid addresses
[tpg/acess2.git] / Kernel / arch / armv7 / start.S
index ef6ac76..2d3f81a 100644 (file)
@@ -68,14 +68,17 @@ _ptr_kmain:
 .extern SyscallHandler
 SVC_Handler:
 @      sub lr, #4
-       srsdb sp!, #19  @ Switch to supervisor mode (DDI0406B D1.6.5) (actually SRSFD)
-       cpsid ifa, #19
+       srsdb sp!, #19  @ Save state to stack
+       cpsie ifa, #19  @ Ensure we're in supervisor with interrupts enabled (should already be there)
        push {r0-r12}
 
        ldr r4, [lr,#-4]
        mvn r5, #0xFF000000
        and r4, r5
 
+       tst r4, #0x1000 
+       bne .arm_specifics
+
        push {r4}
 
        mov r0, sp
@@ -88,6 +91,18 @@ SVC_Handler:
        
        pop {r4-r12}
        rfeia sp!       @ Pop state (actually RFEFD)
+.arm_specifics:
+       and r4, #0xFF
+       mov r0, r4      @ Number
+       mov r1, sp      @ Arguments
+       
+       ldr r4, =ARMv7_int_HandleSyscalls
+       blx r4
+
+       add sp, #4*4
+       pop {r4-r12}
+       rfeia sp!
+
 
 .globl gpIRQHandler
 gpIRQHandler:  .long   0
@@ -135,7 +150,6 @@ DataAbort:
 
 @      POP_GPRS
 @      rfeia sp!       @ Pop state (actually RFEFD)
-       bx lr
 
 .globl PrefetchAbort
 PrefetchAbort:
@@ -152,6 +166,7 @@ PrefetchAbort:
        blx r4
        b .
 
+.section .rodata
 csIRQ_Tag:
 csAbort_Tag:
        .asciz "ARMv7"

UCC git Repository :: git.ucc.asn.au