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] |