diff options
-rw-r--r-- | nptl/ChangeLog | 6 | ||||
-rw-r--r-- | nptl/init.c | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index d8ccec38a2..b18f483726 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2003-02-26 Ulrich Drepper <drepper@redhat.com> + + * init.c (__pthread_initialize_minimal_internal): Set + GL(dl_error_catch_tsd) to __libc_dl_error_tsd. + * Versions (libc:GLIBC_PRIVATE): Export __libc_dl_error_tsd. + 2003-02-24 Ulrich Drepper <drepper@redhat.com> * sem_open.c (sem_open): Fix handling of O_CREAT without O_EXCL. diff --git a/nptl/init.c b/nptl/init.c index ddc6f3d939..cc496a240f 100644 --- a/nptl/init.c +++ b/nptl/init.c @@ -160,6 +160,10 @@ sigcancel_handler (int sig __attribute ((unused))) } +/* When using __thread for this, we do it in libc so as not + to give libpthread its own TLS segment just for this. */ +extern void **__libc_dl_error_tsd (void) __attribute__ ((const)); + void __pthread_initialize_minimal_internal (void) @@ -231,6 +235,12 @@ __pthread_initialize_minimal_internal (void) __static_tls_align = STACK_ALIGN; __static_tls_size = roundup (__static_tls_size, __static_tls_align); +#ifdef SHARED + /* Transfer the old value from the dynamic linker's internal location. */ + *__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) (); + GL(dl_error_catch_tsd) = &__libc_dl_error_tsd; +#endif + /* Register the fork generation counter with the libc. */ __libc_pthread_init (&__fork_generation, __reclaim_stacks, ptr_pthread_functions); |