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]

[PATCH] Fix nptl/tst-getpid{1,2} on s390{,x}


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]