diff options
author | Roland McGrath <roland@gnu.org> | 2003-03-10 21:04:29 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2003-03-10 21:04:29 +0000 |
commit | 4fba8a3b3de9c25468b7d1e2ab4450b977a6703e (patch) | |
tree | 169f6d1d3e3dac9c1707d8e67dea28e4fc5d0a76 /sysdeps/unix/sysv/linux | |
parent | c915e5ad561865f92ce52234f52b5d5e88c3f56b (diff) | |
download | glibc-4fba8a3b3de9c25468b7d1e2ab4450b977a6703e.tar.gz glibc-4fba8a3b3de9c25468b7d1e2ab4450b977a6703e.tar.xz glibc-4fba8a3b3de9c25468b7d1e2ab4450b977a6703e.zip |
2003-03-10 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Don't clobber R7. Copy extra params for NPTL to registers used in clone syscall.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S index 97e27f3fbf..534a1bd12d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S @@ -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)) |