[PATCH] Fix nptl/tst-getpid{1,2} on s390{,x}
Jakub Jelinek
jakub@redhat.com
Tue Dec 14 17:14:00 GMT 2004
Hi!
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.
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.
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.jj 2004-07-12 17:50:26.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 2004-12-14 17:39:17.888568618 +0100
@@ -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 */
--- libc/sysdeps/unix/sysv/linux/s390/s390-64/clone.S.jj 2004-07-12 17:50:26.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 2004-12-14 18:03:24.020208726 +0100
@@ -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 */
--- libc/nptl/sysdeps/unix/sysv/linux/s390/s390-32/clone.S.jj 2004-12-14 17:56:54.715727557 +0100
+++ libc/nptl/sysdeps/unix/sysv/linux/s390/s390-32/clone.S 2004-12-14 17:57:02.301372155 +0100
@@ -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.jj 2004-12-14 17:56:54.000000000 +0100
+++ libc/nptl/sysdeps/unix/sysv/linux/s390/s390-64/clone.S 2004-12-14 18:03:46.223246796 +0100
@@ -0,0 +1,2 @@
+#define RESET_PID
+#include <sysdeps/unix/sysv/linux/s390/s390-64/clone.S>
--- libc/nptl/sysdeps/s390/tcb-offsets.sym.jj 2004-03-10 20:02:20.000000000 +0100
+++ libc/nptl/sysdeps/s390/tcb-offsets.sym 2004-12-14 17:56:00.412430245 +0100
@@ -3,3 +3,4 @@
MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads)
PID offsetof (struct pthread, pid)
+TID offsetof (struct pthread, tid)
Jakub
More information about the Libc-hacker
mailing list