From 874f3a78b9c1bf900df95f40e367b065ff105429 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 30 Jun 2003 23:21:49 +0000 Subject: * sysdeps/unix/sysv/linux/alpha/clone.S: Load child_tid properly. --- sysdeps/unix/sysv/linux/alpha/clone.S | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S index a0aa7712f5..daa804c3fc 100644 --- a/sysdeps/unix/sysv/linux/alpha/clone.S +++ b/sysdeps/unix/sysv/linux/alpha/clone.S @@ -24,9 +24,13 @@ #define _ERRNO_H 1 #include -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *tid, void *tls); - */ +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, + void *arg, pid_t *ptid, void *tls, pid_t *ctid); + + Note that everything past ARG is technically optional, based + on FLAGS, and that CTID is arg 7, and thus is on the stack. + However, since a load from top-of-stack better be legal always, + we don't bother checking FLAGS. */ .text ENTRY(__clone) @@ -51,11 +55,13 @@ ENTRY(__clone) stq a0,0(a1) stq a3,8(a1) - /* Shift the flags, tid and tls arguments into place; the + /* The syscall is of the form clone(flags, usp, ptid, ctid, tls). + Shift the flags, ptid, ctid, tls arguments into place; the child_stack argument is already correct. */ mov a2,a0 mov a4,a2 - mov a5,a3 + ldq a3,0(sp) + mov a5,a4 /* Do the system call. */ ldiq v0,__NR_clone -- cgit 1.4.1