2013-03-28 Roland McGrath <roland@hack.frob.com>
+ * include/stdlib.h [!SHARED] (__call_tls_dtors):
+ Declare with __attribute__ ((weak)).
+ * stdlib/exit.c (__libc_atexit) [!SHARED]:
+ Call __call_tls_dtors only if it's not NULL.
+
+2013-03-28 Roland McGrath <roland@hack.frob.com>
+
* csu/libc-start.c (__libc_start_main) [!SHARED]: If _dl_aux_init
didn't do it already, then set _dl_phdr and _dl_phnum based on the
magic __ehdr_start linker symbol if it's defined.
extern int __cxa_thread_atexit_impl (void (*func) (void *), void *arg,
void *d);
-extern void __call_tls_dtors (void);
-libc_hidden_proto (__call_tls_dtors);
+extern void __call_tls_dtors (void)
+#ifndef SHARED
+ __attribute__ ((weak))
+#endif
+ ;
+libc_hidden_proto (__call_tls_dtors)
extern void __cxa_finalize (void *d);
+2013-03-28 Roland McGrath <roland@hack.frob.com>
+
+ * pthread_create.c (start_thread) [!SHARED]:
+ Call __call_tls_dtors only if it's not NULL.
+
2013-03-19 Siddhesh Poyarekar <siddhesh@redhat.com>
* allocatestack.c (allocate_stack): Use __default_pthread_attr
}
/* Call destructors for the thread_local TLS variables. */
- __call_tls_dtors ();
+#ifndef SHARED
+ if (&__call_tls_dtors != NULL)
+#endif
+ __call_tls_dtors ();
/* Run the destructor for the thread-local data. */
__nptl_deallocate_tsd ();
}
/* Call the destructors. This is called either when a thread returns from the
- initial function or when the process exits via the exit(3) function. */
+ initial function or when the process exits via the exit function. */
void
__call_tls_dtors (void)
{
bool run_list_atexit)
{
/* First, call the TLS destructors. */
- __call_tls_dtors ();
+#ifndef SHARED
+ if (&__call_tls_dtors != NULL)
+#endif
+ __call_tls_dtors ();
/* We do it this way to handle recursive calls to exit () made by
the functions registered with `atexit' and `on_exit'. We call