From 3300816c38721bcddbbeb92de7fe44b90454bce6 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 27 Apr 2000 20:18:02 +0000 Subject: Update. 2000-04-27 Ulrich Drepper * elf/soinit.c (__libc_global_ctors): Call __pthread_initialize_minimal if this function is available. * sysdeps/i386/i486/atomicity.h (exchange_and_add): Use uint32_t for all values. . --- linuxthreads/ChangeLog | 9 +++++++++ linuxthreads/Versions | 3 +++ linuxthreads/pthread.c | 25 +++++++++++++++++-------- linuxthreads/sysdeps/i386/i686/pt-machine.h | 3 +-- 4 files changed, 30 insertions(+), 10 deletions(-) (limited to 'linuxthreads') diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 8161323..ccc38eb 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,12 @@ +2000-04-27 Ulrich Drepper + + * Versions [libpthread] (GLIBC_2.2): Add __pthread_initialize_minimal. + * pthread.c (__pthread_initialize_minimal): New function. Perform + minimal initialization. + (pthread_initialize): Remove this code here. + * sysdeps/i386/i686/pt-machine.h: Include "../useldt.h" again. We + are working around the problem in glibc. + 2000-04-25 Ulrich Drepper * sysdeps/i386/i686/pt-machine.h: Do not use "../useldt.h" for diff --git a/linuxthreads/Versions b/linuxthreads/Versions index e8f7f4e..327e62e 100644 --- a/linuxthreads/Versions +++ b/linuxthreads/Versions @@ -138,5 +138,8 @@ libpthread { # Extensions. pthread_yield; + + # New internal function. + __pthread_initialize_minimal; } } diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 7370420..a78e0c9 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -310,6 +310,23 @@ static void pthread_initialize(void) __attribute__((constructor)); extern void *__dso_handle __attribute__ ((weak)); + +/* Do some minimal initialization which has to be done during the + startup of the C library. */ +void +__pthread_initialize_minimal(void) +{ + /* The errno/h_errno variable of the main thread are the global ones. */ + __pthread_initial_thread.p_errnop = &_errno; + __pthread_initial_thread.p_h_errnop = &_h_errno; + /* If we have special thread_self processing, initialize that for the + main thread now. */ +#ifdef INIT_THREAD_SELF + INIT_THREAD_SELF(&__pthread_initial_thread, 0); +#endif +} + + static void pthread_initialize(void) { struct sigaction sa; @@ -330,14 +347,6 @@ static void pthread_initialize(void) (char *)(((long)CURRENT_STACK_FRAME - 2 * STACK_SIZE) & ~(STACK_SIZE - 1)); /* Update the descriptor for the initial thread. */ __pthread_initial_thread.p_pid = __getpid(); - /* If we have special thread_self processing, initialize that for the - main thread now. */ -#ifdef INIT_THREAD_SELF - INIT_THREAD_SELF(&__pthread_initial_thread, 0); -#endif - /* The errno/h_errno variable of the main thread are the global ones. */ - __pthread_initial_thread.p_errnop = &_errno; - __pthread_initial_thread.p_h_errnop = &_h_errno; /* Play with the stack size limit to make sure that no stack ever grows beyond STACK_SIZE minus one page (to act as a guard page). */ getrlimit(RLIMIT_STACK, &limit); diff --git a/linuxthreads/sysdeps/i386/i686/pt-machine.h b/linuxthreads/sysdeps/i386/i686/pt-machine.h index 4e7832b..68e7871 100644 --- a/linuxthreads/sysdeps/i386/i686/pt-machine.h +++ b/linuxthreads/sysdeps/i386/i686/pt-machine.h @@ -63,5 +63,4 @@ __compare_and_swap (long int *p, long int oldval, long int newval) } -/* Use the LDT implementation only if the kernel is fixed. */ -//#include "../useldt.h" +#include "../useldt.h" -- cgit v1.1