* sysdeps/unix/sysv/linux/s390/s390-32/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.
	* sysdeps/unix/sysv/linux/s390/s390-64/clone.S (__clone): Likewise.
nptl/
	* sysdeps/unix/sysv/linux/s390/s390-32/clone.S: New file.
	* sysdeps/unix/sysv/linux/s390/s390-64/clone.S: New file.
	* sysdeps/s390/tcb-offsets.sym (TID): Add.
This commit is contained in:
Jakub Jelinek 2004-12-15 09:53:46 +00:00
parent befe97e0d0
commit 14cbd70aa6
7 changed files with 44 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-12-14 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/s390/s390-32/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.
* sysdeps/unix/sysv/linux/s390/s390-64/clone.S (__clone): Likewise.
2004-12-15 Andreas Jaeger <aj@suse.de>
* sysdeps/ia64/dl-machine.h (elf_machine_rela): Mark auto instead

View File

@ -1,3 +1,9 @@
2004-12-14 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/s390/s390-32/clone.S: New file.
* sysdeps/unix/sysv/linux/s390/s390-64/clone.S: New file.
* sysdeps/s390/tcb-offsets.sym (TID): Add.
2004-12-15 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: New file.

View File

@ -3,3 +3,4 @@
MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads)
PID offsetof (struct pthread, pid)
TID offsetof (struct pthread, tid)

View File

@ -0,0 +1,2 @@
#define RESET_PID
#include <sysdeps/unix/sysv/linux/s390/s390-32/clone.S>

View File

@ -0,0 +1,2 @@
#define RESET_PID
#include <sysdeps/unix/sysv/linux/s390/s390-64/clone.S>

View File

@ -54,6 +54,18 @@ error:
PSEUDO_END (__clone)
thread_start:
#ifdef RESET_PID
tmh %r3,1 /* CLONE_THREAD == 0x00010000 */
jne 1f
lhi %r2,-1
tml %r3,256 /* CLONE_VM == 0x00000100 */
jne 2f
svc SYS_ify(getpid)
2: ear %r3,%a0
st %r2,PID(%r3)
st %r2,TID(%r3)
1:
#endif
/* fn is in gpr 1, arg in gpr 0 */
lr %r2,%r0 /* set first parameter to void *arg */
ahi %r15,-96 /* make room on the stack for the save area */

View File

@ -55,6 +55,20 @@ error:
PSEUDO_END (__clone)
thread_start:
#ifdef RESET_PID
tmh %r3,1 /* CLONE_THREAD == 0x00010000 */
jne 1f
lhi %r2,-1
tml %r3,256 /* CLONE_VM == 0x00000100 */
jne 2f
svc SYS_ify(getpid)
2: ear %r3,%a0
sllg %r3,%r3,32
ear %r3,%a1
st %r2,PID(%r3)
st %r2,TID(%r3)
1:
#endif
/* fn is in gpr 1, arg in gpr 0 */
lgr %r2,%r0 /* set first parameter to void *arg */
aghi %r15,-160 /* make room on the stack for the save area */