Kernel/x86_64 - Fixed Kernel not using COW, cleanup
[tpg/acess2.git] / Kernel / syscalls.c
index 936bf27..e304b40 100644 (file)
@@ -7,6 +7,7 @@
 #include <acess.h>
 #include <syscalls.h>
 #include <proc.h>
+#include <hal_proc.h>
 #include <errno.h>
 #include <threads.h>
 
@@ -66,7 +67,7 @@ void SyscallHandler(tSyscallRegs *Regs)
        // -- Clone the current thread
        case SYS_CLONE:
                // Call clone system call
-               ret = Proc_Clone(&err, Regs->Arg1);
+               ret = Proc_Clone(Regs->Arg1);
                // Change user stack if a new stack address is passed
                if(ret == 0 && Regs->Arg2)
                        Regs->StackPointer = Regs->Arg2;
@@ -317,19 +318,21 @@ void SyscallHandler(tSyscallRegs *Regs)
                LogF("Log: [%i] ", Threads_GetTID());
                LogF((char*)Regs->Arg1,
                        Regs->Arg2, Regs->Arg3, Regs->Arg4, Regs->Arg5, Regs->Arg6);
-               LogF("\n");
+               LogF("\r\n");
                break;
        //#endif
        
        // -- Default (Return Error)
        default:
-               Warning("SyscallHandler: Unknown System Call %i", Regs->Num);
+               Log_Warning("Syscalls", "Unknown System Call %i", Regs->Num);
                if(Regs->Num < NUM_SYSCALLS)
-                       Warning(" Syscall '%s'", cSYSCALL_NAMES[Regs->Num]);
+                       Log_Warning("Syscall", " named '%s'", cSYSCALL_NAMES[Regs->Num]);
                err = -ENOSYS;
                ret = -1;
                break;
        }
+
+       if(err == 0)    err = errno;
        
        if(err != 0) {
                LOG("ID: %i, Return errno = %i", Regs->Num, err);
@@ -347,10 +350,10 @@ void SyscallHandler(tSyscallRegs *Regs)
        if( callNum != SYS_READ && callNum != SYS_WRITE ) {
        # endif
        LOG("err = %i", err);
-       if(Regs->Num != SYS_EXECVE)
-               LEAVE('x', ret);
-       else
+       if( callNum == SYS_EXECVE )
                LOG("Actual %i", ret);
+       else
+               LEAVE('x', ret);
        # if DEBUG < 2
        }
        # endif

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