This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Tue, Dec 14, 2004 at 06:14:52PM +0100, Jakub Jelinek wrote: > So far tested outside of glibc tree only (and solely 31 bit). > Martin, does this look ok? > I'll test it fully in my next automated glibc build. Testing revealed missing #include <tls.h>, fixed below. With this patch plus the ppc64 clone.S patch I posted today tst-getpid{1,2} passes on i386/i686/x86_64/ia64/ppc/ppc64/s390/s390x. 2004-12-15 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. 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. --- libc/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 1 Jul 2004 17:34:29 -0000 1.8 +++ libc/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 15 Dec 2004 12:20:45 -0000 1.8.2.2 @@ -21,6 +21,7 @@ and invokes a function in the right context after its all over. */ #include <sysdep.h> +#include <tls.h> #define _ERRNO_H 1 #include <bits/errno.h> @@ -54,6 +55,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 */ --- libc/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 1 Jul 2004 17:34:30 -0000 1.10 +++ libc/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 15 Dec 2004 12:20:47 -0000 1.10.2.2 @@ -22,6 +22,7 @@ and invokes a function in the right context after its all over. */ #include <sysdep.h> +#include <tls.h> #define _ERRNO_H 1 #include <bits/errno.h> @@ -55,6 +56,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 */ --- libc/nptl/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 1 Jan 1970 00:00:00 -0000 +++ libc/nptl/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 15 Dec 2004 09:53:45 -0000 1.1.2.1 @@ -0,0 +1,2 @@ +#define RESET_PID +#include <sysdeps/unix/sysv/linux/s390/s390-32/clone.S> --- libc/nptl/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 1 Jan 1970 00:00:00 -0000 +++ libc/nptl/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 15 Dec 2004 09:53:45 -0000 1.1.2.1 @@ -0,0 +1,2 @@ +#define RESET_PID +#include <sysdeps/unix/sysv/linux/s390/s390-64/clone.S> --- libc/nptl/sysdeps/s390/tcb-offsets.sym 10 Mar 2004 18:59:29 -0000 1.2 +++ libc/nptl/sysdeps/s390/tcb-offsets.sym 15 Dec 2004 09:53:44 -0000 1.2.2.1 @@ -3,3 +3,4 @@ MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) PID offsetof (struct pthread, pid) +TID offsetof (struct pthread, tid) Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |