Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 27 Feb 2003 04:12:53 +0000 (04:12 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 27 Feb 2003 04:12:53 +0000 (04:12 +0000)
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.

nptl/ChangeLog
nptl/init.c

index d8ccec3..b18f483 100644 (file)
@@ -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.
index ddc6f3d..cc496a2 100644 (file)
@@ -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);