Kernel/x86 - Fix not restoring registers in Proc_CloneInt
authorJohn Hodge <[email protected]>
Sun, 18 May 2014 06:17:26 +0000 (14:17 +0800)
committerJohn Hodge <[email protected]>
Sun, 18 May 2014 06:17:26 +0000 (14:17 +0800)
KernelLand/Kernel/arch/x86/proc.asm
KernelLand/Kernel/arch/x86/proc.c

index b8c01bc..be4c10d 100644 (file)
@@ -38,7 +38,7 @@ Proc_CloneInt:
        mov esi, [esp+0x20+8]
        mov [esi], eax
        ; Undo the pusha
-       add esp, 0x20
+       popa
        mov eax, .newTask
        ret
 .newTask:
index 5637985..460c920 100644 (file)
@@ -463,6 +463,14 @@ tTID Proc_NewKThread(void (*Fcn)(void*), void *Data)
        return newThread->TID;
 }
 
+#if 0
+tPID Proc_NewProcess(Uint Flags, void (*Fcn)(void*), size_t SaveSize, const void *Data)
+{
+       tThread *newThread = Threads_CloneTCB(CLONE_VM);
+       return 0;
+}
+#endif
+
 /**
  * \fn int Proc_Clone(Uint *Err, Uint Flags)
  * \brief Clone the current process
@@ -473,6 +481,7 @@ tPID Proc_Clone(Uint Flags)
        tThread *cur = Proc_GetCurThread();
        Uint    eip;
 
+       Log_Warning("Proc", "Proc_Clone is deprecated");
        // Sanity, please
        if( !(Flags & CLONE_VM) ) {
                Log_Error("Proc", "Proc_Clone: Don't leave CLONE_VM unset, use Proc_NewKThread instead");
@@ -482,6 +491,9 @@ tPID Proc_Clone(Uint Flags)
        // New thread
        newThread = Threads_CloneTCB(Flags);
        if(!newThread)  return -1;
+       ASSERT(newThread->Process);
+       //ASSERT(CheckMem(newThread->Process, sizeof(tProcess)));
+       //LOG("newThread->Process = %p", newThread->Process);
 
        newThread->KernelStack = cur->KernelStack;
 
@@ -490,6 +502,9 @@ tPID Proc_Clone(Uint Flags)
        if( eip == 0 ) {
                return 0;
        }
+       //ASSERT(newThread->Process);
+       //ASSERT(CheckMem(newThread->Process, sizeof(tProcess)));
+       //LOG("newThread->Process = %p", newThread->Process);
        newThread->SavedState.EIP = eip;
        newThread->SavedState.SSE = NULL;
        newThread->SavedState.bSSEModified = 0;

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