mirror of git://sourceware.org/git/glibc.git
Update.
2004-12-14 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Add support for pid caching in nptl.
This commit is contained in:
parent
8a3f5844c5
commit
1f9d7c2739
|
|
@ -1,3 +1,8 @@
|
||||||
|
2004-12-14 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Add support
|
||||||
|
for pid caching in nptl.
|
||||||
|
|
||||||
2004-10-18 Maciej W. Rozycki <macro@mips.com>
|
2004-10-18 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/mips/bits/socket.h (__cmsg_nxthdr): Use
|
* sysdeps/unix/sysv/linux/mips/bits/socket.h (__cmsg_nxthdr): Use
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,11 @@
|
||||||
|
2004-12-14 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/powerpc/tcb-offsets.sym: Add TID.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: New file.
|
||||||
|
|
||||||
|
* tst-getpid1.c: If child crashes, report this first. Print which
|
||||||
|
signal.
|
||||||
|
|
||||||
2004-12-09 Ulrich Drepper <drepper@redhat.com>
|
2004-12-09 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* init.c (__pthread_initialize_minimal_internal): Also unblock
|
* init.c (__pthread_initialize_minimal_internal): Also unblock
|
||||||
|
|
|
||||||
|
|
@ -12,3 +12,4 @@
|
||||||
MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
||||||
#endif
|
#endif
|
||||||
PID thread_offsetof (pid)
|
PID thread_offsetof (pid)
|
||||||
|
TID thread_offsetof (tid)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
#define RESET_PID
|
||||||
|
#include <tcb-offsets.h>
|
||||||
|
#include <sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S>
|
||||||
|
|
@ -23,6 +23,9 @@
|
||||||
#include <bp-sym.h>
|
#include <bp-sym.h>
|
||||||
#include <bp-asm.h>
|
#include <bp-asm.h>
|
||||||
|
|
||||||
|
#define CLONE_VM 0x00000100
|
||||||
|
#define CLONE_THREAD 0x00010000
|
||||||
|
|
||||||
/* This is the only really unusual system call in PPC linux, but not
|
/* This is the only really unusual system call in PPC linux, but not
|
||||||
because of any weirdness in the system call itself; because of
|
because of any weirdness in the system call itself; because of
|
||||||
all the freaky stuff we have to do to make the call useful. */
|
all the freaky stuff we have to do to make the call useful. */
|
||||||
|
|
@ -45,10 +48,13 @@ ENTRY (BP_SYM (__clone))
|
||||||
beq- cr0,L(badargs)
|
beq- cr0,L(badargs)
|
||||||
|
|
||||||
/* Set up stack frame for parent. */
|
/* Set up stack frame for parent. */
|
||||||
stdu r1,-80(r1)
|
stdu r1,-88(r1)
|
||||||
std r29,56(r1)
|
std r29,56(r1)
|
||||||
std r30,64(r1)
|
std r30,64(r1)
|
||||||
std r31,72(r1)
|
std r31,72(r1)
|
||||||
|
#ifdef RESET_PID
|
||||||
|
std r28,80(r1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up stack frame for child. */
|
/* Set up stack frame for child. */
|
||||||
clrrdi r4,r4,4
|
clrrdi r4,r4,4
|
||||||
|
|
@ -58,6 +64,9 @@ ENTRY (BP_SYM (__clone))
|
||||||
/* Save fn, args, stack across syscall. */
|
/* Save fn, args, stack across syscall. */
|
||||||
mr r29,r3 /* Function in r29. */
|
mr r29,r3 /* Function in r29. */
|
||||||
mr r30,r4 /* Stack pointer in r30. */
|
mr r30,r4 /* Stack pointer in r30. */
|
||||||
|
#ifdef RESET_PID
|
||||||
|
mr r28,r5 /* Flags in r28. */
|
||||||
|
#endif
|
||||||
mr r31,r6 /* Argument in r31. */
|
mr r31,r6 /* Argument in r31. */
|
||||||
|
|
||||||
/* 'flags' argument is first parameter to clone syscall. (The other
|
/* 'flags' argument is first parameter to clone syscall. (The other
|
||||||
|
|
@ -81,6 +90,20 @@ ENTRY (BP_SYM (__clone))
|
||||||
it adds a race condition if a signal is sent to a thread
|
it adds a race condition if a signal is sent to a thread
|
||||||
just after it is created (in the previous three instructions). */
|
just after it is created (in the previous three instructions). */
|
||||||
mr r1,r30
|
mr r1,r30
|
||||||
|
|
||||||
|
#ifdef RESET_PID
|
||||||
|
andis. r0,r28,1 /* This is & CLONE_THREAD */
|
||||||
|
bne+ r0,L(oldpid)
|
||||||
|
andi. r0,r28,CLONE_VM
|
||||||
|
li r3,-1
|
||||||
|
bne- r0,L(nomoregetpid)
|
||||||
|
DO_CALL(SYS_ify(getpid))
|
||||||
|
L(nomoregetpid):
|
||||||
|
stw r3,TID(r13)
|
||||||
|
stw r3,PID(r13)
|
||||||
|
L(oldpid):
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Call procedure. */
|
/* Call procedure. */
|
||||||
ld r0,0(r29)
|
ld r0,0(r29)
|
||||||
ld r2,8(r29)
|
ld r2,8(r29)
|
||||||
|
|
@ -96,10 +119,13 @@ ENTRY (BP_SYM (__clone))
|
||||||
|
|
||||||
L(parent):
|
L(parent):
|
||||||
/* Parent. Restore registers & return. */
|
/* Parent. Restore registers & return. */
|
||||||
|
#ifdef RESET_PID
|
||||||
|
ld r28,88(r1)
|
||||||
|
#endif
|
||||||
ld r31,72(r1)
|
ld r31,72(r1)
|
||||||
ld r30,64(r1)
|
ld r30,64(r1)
|
||||||
ld r29,56(r1)
|
ld r29,56(r1)
|
||||||
addi r1,r1,80
|
addi r1,r1,88
|
||||||
bnslr+
|
bnslr+
|
||||||
b JUMPTARGET(__syscall_error)
|
b JUMPTARGET(__syscall_error)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue