X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86_64%2Fproc.c;h=e3d7e90b651f9272e27890e3eab53abc27f99428;hb=d01b7e1a4924a41a5219eedfd2f6d32b310368cd;hp=d05e9ae69f0a153b2092e75c57ec99b37aa77294;hpb=61c8b3334fb9bb3c1fb48d9f1f3508ffbe5341bf;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86_64/proc.c b/Kernel/arch/x86_64/proc.c index d05e9ae6..e3d7e90b 100644 --- a/Kernel/arch/x86_64/proc.c +++ b/Kernel/arch/x86_64/proc.c @@ -594,16 +594,22 @@ Uint Proc_MakeUserStack(void) void Proc_StartUser(Uint Entrypoint, Uint Base, int ArgC, char **ArgV, int DataSize) { - Uint *stack = (void*)Proc_MakeUserStack(); + Uint *stack; char **envp; int i; Uint delta; Uint16 ss, cs; - LOG("stack = 0x%x", stack); // Copy Arguments - stack = (void*)( Proc_MakeUserStack() - DataSize ); + stack = (void*)Proc_MakeUserStack(); + if(!stack) { + Log_Error("Proc", "Unable to create user stack!"); + Threads_Exit(0, -1); + } + stack -= (DataSize+7)/8; + LOG("stack = 0x%x", stack); + Log("stack = %p, DataSize = %i", stack, DataSize); memcpy( stack, ArgV, DataSize ); free(ArgV);