summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-14 23:28:23 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-14 23:28:23 +0000
commite22a221d6b7cf1c9bfdc4d7813193f5466fb6c66 (patch)
tree32658eecbe8e88aa49eb2bd9be0ade8c031b5287
parent42c8f44c05148a94ba8fef62716f90b61c863287 (diff)
downloadglibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.tar.gz
glibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.tar.xz
glibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.zip
Update.
2003-03-14  Ulrich Drepper  <drepper@redhat.com>

	* tst-fork4.c: Use test-skeleton.c.

	* pthread_create.c (start_thread): Use CALL_THREAD_FCT if defined.
	* sysdeps/i386/tls.h: Define CALL_THREAD_FCT.
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/sysdeps/i386/tls.h14
-rw-r--r--nptl/tst-fork4.c8
3 files changed, 27 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 9d5af4ed92..7d15732f28 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-14  Ulrich Drepper  <drepper@redhat.com>
+
+	* tst-fork4.c: Use test-skeleton.c.
+
 2003-03-14  Roland McGrath  <roland@redhat.com>
 
 	* init.c: Fix typo "#eli" for "#else".
@@ -39,6 +43,9 @@
 
 2003-03-14  Ulrich Drepper  <drepper@redhat.com>
 
+	* pthread_create.c (start_thread): Use CALL_THREAD_FCT if defined.
+	* sysdeps/i386/tls.h: Define CALL_THREAD_FCT.
+
 	* pthread_create.c (start_thread): setjmp is expected to return 0.
 
 	* sysdeps/x86_64/tls.h (THREAD_GETMEM): Mark asms volatile.
diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
index eea5e3010d..8a1f547b83 100644
--- a/nptl/sysdeps/i386/tls.h
+++ b/nptl/sysdeps/i386/tls.h
@@ -352,6 +352,20 @@ union user_desc_init
        }})
 
 
+/* Call the user-provided thread function.  */
+#define CALL_THREAD_FCT(descr) \
+  ({ void *__res;							      \
+     int __ignore1, __ignore2;						      \
+     asm volatile ("subl $12, %%esp\n\t"				      \
+		   "pushl %%gs:%P4\n\t"					      \
+		   "call *%%gs:%P3\n\t"					      \
+		   "addl $16, %%esp"					      \
+		   : "=a" (__res), "=c" (__ignore1), "=d" (__ignore2)	      \
+		   : "i" (offsetof (struct pthread, start_routine)),	      \
+		     "i" (offsetof (struct pthread, arg)));		      \
+     __res; })
+
+
 #endif /* __ASSEMBLER__ */
 
 #endif	/* tls.h */
diff --git a/nptl/tst-fork4.c b/nptl/tst-fork4.c
index 7f2b178e26..7cb0f9c1f2 100644
--- a/nptl/tst-fork4.c
+++ b/nptl/tst-fork4.c
@@ -24,8 +24,9 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 
-int
-main (void)
+
+static int
+do_test (void)
 {
   pthread_t me = pthread_self ();
 
@@ -58,3 +59,6 @@ main (void)
 
   return 1;
 }
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"