Ver Fonte

NPTL: Rename a variable

There seems to be a bug in gold with static TLS at least on x86_64 (?)

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Bernhard Reutner-Fischer há 10 anos atrás
pai
commit
7c78a5c52b
3 ficheiros alterados com 18 adições e 4 exclusões
  1. 2 0
      ldso/include/ldsodefs.h
  2. 7 2
      ldso/ldso/dl-tls.c
  3. 9 2
      libc/misc/pthread/tsd.c

+ 2 - 0
ldso/include/ldsodefs.h

@@ -106,7 +106,9 @@ EXTERN size_t _dl_tls_static_used;
 /* Alignment requirement of the static TLS block.  */
 /* Alignment requirement of the static TLS block.  */
 EXTERN size_t _dl_tls_static_align;
 EXTERN size_t _dl_tls_static_align;
 /* Function pointer for catching TLS errors.  */
 /* Function pointer for catching TLS errors.  */
+#if 1 /* def _LIBC_REENTRANT */
 EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
 EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
+#endif
 
 
 /* Number of additional entries in the slotinfo array of each slotinfo
 /* Number of additional entries in the slotinfo array of each slotinfo
    list element.  A large number makes it almost certain take we never
    list element.  A large number makes it almost certain take we never

+ 7 - 2
ldso/ldso/dl-tls.c

@@ -950,8 +950,13 @@ static bool tls_init_tp_called;
 void ** __attribute__ ((const))
 void ** __attribute__ ((const))
 _dl_initial_error_catch_tsd (void)
 _dl_initial_error_catch_tsd (void)
 {
 {
-	static void *data;
+	static
-	return &data;
+#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
 #ifdef SHARED

+ 9 - 2
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.
 /* libpthread sets _dl_error_catch_tsd to point to this function.
    We define it here instead of in libpthread so that it doesn't
    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.  */
    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 **__libc_dl_error_tsd(void) __attribute__ ((const));
 void ** __attribute__ ((const))
 void ** __attribute__ ((const))
 __libc_dl_error_tsd (void)
 __libc_dl_error_tsd (void)
 {
 {
-  static __thread void *data __attribute__ ((tls_model ("initial-exec")));
+  static __thread void *__tsd_data attribute_tls_model_ie;
-  return &data;
+  return &__tsd_data;
 }
 }