amd64: Fix a bug in cpu_prepare_lwp().
authorJordan Gordeev <jgordeev@dir.bg>
Sat, 13 Jun 2009 16:52:27 +0000 (19:52 +0300)
committerJordan Gordeev <jgordeev@dir.bg>
Sat, 13 Jun 2009 16:52:27 +0000 (19:52 +0300)
The code used the i386 argument passing convention - on the stack -
while amd64 expected the argument in %rdi.
Fixes threaded apps.

sys/platform/pc64/amd64/vm_machdep.c

index 56a5b94..8e2eaec 100644 (file)
@@ -203,11 +203,7 @@ cpu_prepare_lwp(struct lwp *lp, struct lwp_params *params)
        regs->tf_rip = (long)params->func;
        regs->tf_rsp = (long)params->stack;
        /* Set up argument for function call */
-       regs->tf_rsp -= sizeof(params->arg);
-       error = 
-           copyout(&params->arg, (void *)regs->tf_rsp, sizeof(params->arg));
-       if (error)
-               return (error);
+       regs->tf_rdi = params->arg; /* JG Can this be in userspace addresses? */
        /*
         * Set up fake return address.  As the lwp function may never return,
         * we simply copy out a NULL pointer and force the lwp to receive