Kernel/armv7 - Debugging, fixed TLB issues with a HACK!
[tpg/acess2.git] / Kernel / arch / armv7 / proc.S
index f62100e..531de29 100644 (file)
@@ -18,16 +18,8 @@ KernelThreadHeader:
        @ TODO: Do something with the thread pointer
        
        ldr r4, [sp],#4 @ Function
-       ldr r5, [sp],#4
-       @ Get arguments
-       sub r5, #1
-       ldrhs r0, [sp],#4
-@      suble r5, #1
-@      ldrhs r1, [sp],#4
-@      suble r5, #1
-@      ldrhs r2, [sp],#4
-@      suble r5, #1
-@      ldrhs r3, [sp],#4
+       @ Get argument
+       ldr r0, [sp],#4
 
        blx r4
        
@@ -35,14 +27,6 @@ KernelThreadHeader:
        bl Threads_Exit
        b .
 
-.globl Proc_int_DropToUser
-@ R0: User IP
-@ R1: User SP
-Proc_int_DropToUser:
-       cps #16
-       mov sp, r1
-       mov pc, r0
-
 .globl SwitchTask
 @ R0: New stack
 @ R1: Pointer to where to save old stack
@@ -62,6 +46,8 @@ SwitchTask:
        ldr r1, [sp,#4*10]
        tst r1, r1
        mcrne p15, 0, r1, c2, c0, 0     @ Set TTBR0 to r0
+       mov r1, #0
+       mcrne p15, 0, r1, c8, c7, 0     @ TLBIALL - Invalidate all
 
        @ Restore SP
        mov sp, r0
@@ -87,21 +73,32 @@ Proc_CloneInt:
        ldr r0, =Proc_CloneInt_new
        pop {r4-r12,pc}
 Proc_CloneInt_new:
-       cps #18
-               
-@      mov r0, #0
-@      mov r1, #0
-@      sub r1, #1
-@      bl MM_DumpTables
-
-@      ldr r0, =csProc_CloneInt_NewTaskMessage
-@      bl Log
-       
-       cps #19
        mov r0, #0
        pop {r4-r12,pc}
 
+@ R0: New user SP
+@ Return: Old user SP
+.globl Proc_int_SwapUserSP
+Proc_int_SwapUserSP:
+       cps #31 @ Go to system mode
+       mov r1, sp
+       tst r0, r0      @ Only update if non-zero
+       movne sp, r0
+       mov r0, r1
+       cps #19
+       mov pc, lr
+
+.section .usertext, "ax"
+.globl Proc_int_DropToUser
+@ R0: User IP
+@ R1: User SP
+Proc_int_DropToUser:
+       cps #16
+       mov sp, r1
+       mov pc, r0
 
 .section .rodata
 csProc_CloneInt_NewTaskMessage:
-       .asciz "New task"
+       .asciz "New task PC=%p, R4=%p, sp=%p"
+csProc_CloneInt_OldTaskMessage:
+       .asciz "Parent task PC=%p, R4=%p, SP=%p"

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