Skip to content
Snippets Groups Projects
Commit 8a998da3 authored by John Hodge's avatar John Hodge
Browse files

Kernel - Fixed page fault Proc_ReturnToUser

parent d5822e9a
No related merge requests found
...@@ -158,14 +158,16 @@ SpawnTask: ...@@ -158,14 +158,16 @@ SpawnTask:
Proc_ReturnToUser: Proc_ReturnToUser:
push ebp push ebp
mov ebp, esp mov ebp, esp
; [EBP+4]: handler to use ; [EBP+8]: handler to use
; [EBP+8]: parameter ; [EBP+12]: parameter
; [EBP+16]: kernel stack top
call Proc_GetCurThread ;call Proc_GetCurThread
; EAX is the current thread ; EAX is the current thread
mov ebx, eax ;mov ebx, eax
mov eax, [ebx+12*4] ; Get Kernel Stack ;mov eax, [ebx+12*4] ; Get Kernel Stack
mov eax, [ebp+16] ; Get Kernel Stack
sub eax, KSTACK_USERSTATE_SIZE sub eax, KSTACK_USERSTATE_SIZE
; ;
...@@ -208,7 +210,7 @@ Proc_ReturnToUser: ...@@ -208,7 +210,7 @@ Proc_ReturnToUser:
; Get and alter User SP ; Get and alter User SP
mov edi, edx mov edi, edx
mov edx, [ebp+8] ; Get parameter mov edx, [ebp+12] ; Get parameter
mov [edi+4], edx ; save to user stack mov [edi+4], edx ; save to user stack
mov [edi], DWORD User_Syscall_RetAndExit ; Return Address mov [edi], DWORD User_Syscall_RetAndExit ; Return Address
...@@ -223,7 +225,7 @@ Proc_ReturnToUser: ...@@ -223,7 +225,7 @@ Proc_ReturnToUser:
push edi ; ESP push edi ; ESP
push 0x202 ; EFLAGS (IP and Rsvd) push 0x202 ; EFLAGS (IP and Rsvd)
push 0x1B ; CS push 0x1B ; CS
mov eax, [ebp+4] ; Method to call mov eax, [ebp+8] ; Method to call
push eax ; EIP push eax ; EIP
iret iret
......
...@@ -49,7 +49,7 @@ extern int giNextTID; ...@@ -49,7 +49,7 @@ extern int giNextTID;
extern tThread gThreadZero; extern tThread gThreadZero;
extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags); extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags);
extern void Isr8(void); // Double Fault extern void Isr8(void); // Double Fault
extern void Proc_ReturnToUser(tVAddr Handler, Uint Argument); extern void Proc_ReturnToUser(tVAddr Handler, Uint Argument, tVAddr KernelStack);
// === PROTOTYPES === // === PROTOTYPES ===
void ArchThreads_Init(void); void ArchThreads_Init(void);
...@@ -833,7 +833,7 @@ void Proc_CallFaultHandler(tThread *Thread) ...@@ -833,7 +833,7 @@ void Proc_CallFaultHandler(tThread *Thread)
{ {
// Rewinds the stack and calls the user function // Rewinds the stack and calls the user function
// Never returns // Never returns
Proc_ReturnToUser( Thread->FaultHandler, Thread->CurFaultNum ); Proc_ReturnToUser( Thread->FaultHandler, Thread->CurFaultNum, Thread->KernelStack );
for(;;); for(;;);
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment