summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldso/include/ldsodefs.h2
-rw-r--r--ldso/ldso/dl-tls.c9
-rw-r--r--libc/misc/pthread/tsd.c11
3 files changed, 18 insertions, 4 deletions
diff --git a/ldso/include/ldsodefs.h b/ldso/include/ldsodefs.h
index 4063d00f4..0feed8954 100644
--- a/ldso/include/ldsodefs.h
+++ b/ldso/include/ldsodefs.h
@@ -106,7 +106,9 @@ EXTERN size_t _dl_tls_static_used;
/* Alignment requirement of the static TLS block. */
EXTERN size_t _dl_tls_static_align;
/* Function pointer for catching TLS errors. */
+#if 1 /* def _LIBC_REENTRANT */
EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
+#endif
/* Number of additional entries in the slotinfo array of each slotinfo
list element. A large number makes it almost certain take we never
diff --git a/ldso/ldso/dl-tls.c b/ldso/ldso/dl-tls.c
index 6679693f4..05193a893 100644
--- a/ldso/ldso/dl-tls.c
+++ b/ldso/ldso/dl-tls.c
@@ -950,8 +950,13 @@ static bool tls_init_tp_called;
void ** __attribute__ ((const))
_dl_initial_error_catch_tsd (void)
{
- static void *data;
- return &data;
+ static
+#if 0 /* def ARCH_NEEDS_BOOTSTRAP_RELOCS */
+ /* If we have to do bootstrap relocs anyway we might as well */
+ __thread
+# endif
+ void *__tsd_data;
+ return &__tsd_data;
}
#ifdef SHARED
diff --git a/libc/misc/pthread/tsd.c b/libc/misc/pthread/tsd.c
index 586ead3fa..3598b8927 100644
--- a/libc/misc/pthread/tsd.c
+++ b/libc/misc/pthread/tsd.c
@@ -1,11 +1,18 @@
+/*
+ * Copyright (C) 2006 by Steven J. Hill <sjhill@realitydiluted.com>
+ *
+ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
+ */
/* libpthread sets _dl_error_catch_tsd to point to this function.
We define it here instead of in libpthread so that it doesn't
need to have a TLS segment of its own just for this one pointer. */
+#include <features.h>
+
void **__libc_dl_error_tsd(void) __attribute__ ((const));
void ** __attribute__ ((const))
__libc_dl_error_tsd (void)
{
- static __thread void *data __attribute__ ((tls_model ("initial-exec")));
- return &data;
+ static __thread void *__tsd_data attribute_tls_model_ie;
+ return &__tsd_data;
}