2003-03-10 Steven Munroe <sjmunroe@us.ibm.com>
authorRoland McGrath <roland@gnu.org>
Mon, 10 Mar 2003 21:04:29 +0000 (21:04 +0000)
committerRoland McGrath <roland@gnu.org>
Mon, 10 Mar 2003 21:04:29 +0000 (21:04 +0000)
        * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Don't clobber R7.
Copy extra params for NPTL to registers used in clone syscall.

sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S

index 97e27f3..534a1bd 100644 (file)
@@ -28,7 +28,8 @@
    all the freaky stuff we have to do to make the call useful.  */
 
 /* int [r3] clone(int (*fn)(void *arg) [r3], void *child_stack [r4],
-                 int flags [r5], void *arg [r6]); */
+                  int flags [r5], void *arg [r6], void *parent_tid [r7],
+                  void *tls [r8], void *child_tid [r9]); */
 
 ENTRY (BP_SYM (__clone))
        /* GKM FIXME: add bounds checks, where sensible.  */
@@ -37,8 +38,8 @@ ENTRY (BP_SYM (__clone))
 
        /* Check for child_stack == NULL || fn == NULL.  */
        cmpdi   cr0,r4,0
-       ld      r7,0(r3)
-       cmpdi   cr1,r7,0
+       ld      r0,0(r3)
+       cmpdi   cr1,r0,0
        cror    cr0*4+eq,cr1*4+eq,cr0*4+eq
        beq-    cr0,L(badargs)
 
@@ -61,6 +62,10 @@ ENTRY (BP_SYM (__clone))
        /* 'flags' argument is first parameter to clone syscall. (The other
           argument is the stack pointer, already in r4.)  */
        mr      r3,r5
+  /* Move the parent_tid, child_tid and tls arguments. */
+       mr      r5,r7
+       mr      r6,r8
+       mr      r7,r9
 
        /* Do the call.  */
        DO_CALL(SYS_ify(clone))