diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-03-14 23:28:23 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-03-14 23:28:23 +0000 |
commit | e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66 (patch) | |
tree | 32658eecbe8e88aa49eb2bd9be0ade8c031b5287 | |
parent | 42c8f44c05148a94ba8fef62716f90b61c863287 (diff) | |
download | glibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.tar glibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.tar.gz glibc-e22a221d6b7cf1c9bfdc4d7813193f5466fb6c66.tar.bz2 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/ChangeLog | 7 | ||||
-rw-r--r-- | nptl/sysdeps/i386/tls.h | 14 | ||||
-rw-r--r-- | nptl/tst-fork4.c | 8 |
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" |