mirror of git://sourceware.org/git/glibc.git
* sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Add support for NPTL where the PID is stored at userlevel and needs to be reset when CLONE_THREAD is not used. nptl/ * sysdeps/unix/sysv/linux/alpha/clone.S: New file. * sysdeps/alpha/tcb-offsets.sym (TID_OFFSET): New.
2004-12-17 Richard Henderson <rth@redhat.com> * sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Add support for NPTL where the PID is stored at userlevel and needs to be reset when CLONE_THREAD is not used.
This commit is contained in:
parent
9b7adbb732
commit
cbc53df0fa
|
|
@ -1,3 +1,9 @@
|
||||||
|
2004-12-17 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Add support
|
||||||
|
for NPTL where the PID is stored at userlevel and needs to be
|
||||||
|
reset when CLONE_THREAD is not used.
|
||||||
|
|
||||||
2004-12-17 Jakub Jelinek <jakub@redhat.com>
|
2004-12-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.
|
* sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2004-12-17 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/clone.S: New file.
|
||||||
|
* sysdeps/alpha/tcb-offsets.sym (TID_OFFSET): New.
|
||||||
|
|
||||||
2004-12-16 Ulrich Drepper <drepper@redhat.com>
|
2004-12-16 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/powerpc/powerpc64/bits/local_lim.h: New file.
|
* sysdeps/unix/sysv/linux/powerpc/powerpc64/bits/local_lim.h: New file.
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,4 @@
|
||||||
|
|
||||||
MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
||||||
PID_OFFSET thread_offsetof (pid)
|
PID_OFFSET thread_offsetof (pid)
|
||||||
|
TID_OFFSET thread_offsetof (tid)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
#define RESET_PID
|
||||||
|
#include <sysdeps/unix/sysv/linux/alpha/clone.S>
|
||||||
|
|
@ -24,6 +24,9 @@
|
||||||
#define _ERRNO_H 1
|
#define _ERRNO_H 1
|
||||||
#include <bits/errno.h>
|
#include <bits/errno.h>
|
||||||
|
|
||||||
|
#define CLONE_VM 0x00000100
|
||||||
|
#define CLONE_THREAD 0x00010000
|
||||||
|
|
||||||
/* int clone(int (*fn)(void *arg), void *child_stack, int flags,
|
/* int clone(int (*fn)(void *arg), void *child_stack, int flags,
|
||||||
void *arg, pid_t *ptid, void *tls, pid_t *ctid);
|
void *arg, pid_t *ptid, void *tls, pid_t *ctid);
|
||||||
|
|
||||||
|
|
@ -51,9 +54,12 @@ ENTRY(__clone)
|
||||||
beq a1,$error /* no NULL stack pointers */
|
beq a1,$error /* no NULL stack pointers */
|
||||||
|
|
||||||
/* Save the fn ptr and arg on the new stack. */
|
/* Save the fn ptr and arg on the new stack. */
|
||||||
subq a1,16,a1
|
subq a1,32,a1
|
||||||
stq a0,0(a1)
|
stq a0,0(a1)
|
||||||
stq a3,8(a1)
|
stq a3,8(a1)
|
||||||
|
#ifdef RESET_PID
|
||||||
|
stq a2,16(a1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The syscall is of the form clone(flags, usp, ptid, ctid, tls).
|
/* The syscall is of the form clone(flags, usp, ptid, ctid, tls).
|
||||||
Shift the flags, ptid, ctid, tls arguments into place; the
|
Shift the flags, ptid, ctid, tls arguments into place; the
|
||||||
|
|
@ -93,10 +99,19 @@ thread_start:
|
||||||
mov 0, fp
|
mov 0, fp
|
||||||
.prologue 0
|
.prologue 0
|
||||||
|
|
||||||
|
#ifdef RESET_PID
|
||||||
|
/* Check and see if we need to reset the PID. */
|
||||||
|
ldq t0,16(sp)
|
||||||
|
lda t1,CLONE_THREAD
|
||||||
|
and t0,t1,t2
|
||||||
|
beq t2,2f
|
||||||
|
1:
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Load up the arguments. */
|
/* Load up the arguments. */
|
||||||
ldq pv,0(sp)
|
ldq pv,0(sp)
|
||||||
ldq a0,8(sp)
|
ldq a0,8(sp)
|
||||||
addq sp,16,sp
|
addq sp,32,sp
|
||||||
|
|
||||||
/* Call the user's function. */
|
/* Call the user's function. */
|
||||||
jsr ra,(pv)
|
jsr ra,(pv)
|
||||||
|
|
@ -113,6 +128,22 @@ thread_start:
|
||||||
/* Die horribly. */
|
/* Die horribly. */
|
||||||
halt
|
halt
|
||||||
|
|
||||||
|
#ifdef RESET_PID
|
||||||
|
2:
|
||||||
|
rduniq
|
||||||
|
lda t1, CLONE_VM
|
||||||
|
mov v0, s0
|
||||||
|
lda v0, -1
|
||||||
|
and t0, t1, t2
|
||||||
|
bne t2, 3f
|
||||||
|
lda v0, __NR_getxpid
|
||||||
|
callsys
|
||||||
|
3:
|
||||||
|
stl v0, PID_OFFSET(s0)
|
||||||
|
stl v0, TID_OFFSET(s0)
|
||||||
|
br 1b
|
||||||
|
#endif
|
||||||
|
|
||||||
.end thread_start
|
.end thread_start
|
||||||
|
|
||||||
weak_alias(__clone, clone)
|
weak_alias(__clone, clone)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue