summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2015-01-29 02:34:17 +0000
committerChandler Carruth <chandlerc@gmail.com>2015-01-29 02:34:17 +0000
commit9cefa9ac2d66ebf16a289c5d916ed79887c93d7c (patch)
tree447cf523222a32968d83b99314ce0af61657d864 /llvm
parent7f25a40550aac94ceab1c7ae1c32ec24a7459807 (diff)
downloadbcm5719-llvm-9cefa9ac2d66ebf16a289c5d916ed79887c93d7c.tar.gz
bcm5719-llvm-9cefa9ac2d66ebf16a289c5d916ed79887c93d7c.zip
[LPM] Try again to appease powerpc64 in its self host. I've been unable
to get a powerpc64 host so that I can reproduce and test this, but it only impacts that platform so trying the only other realistic option. According to Ulrich, who debugged this initially, initial-exec is likely to be sufficient for our needs and not subject to this bug. Will watch the build bots to see. If this doesn't work, I'll be forced to cut a really ugly pthread-based approach into the primary user (our stack trace printing) as that user cannot use the ThreadLocal implementation due to lifetime issues. llvm-svn: 227414
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Support/Compiler.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h
index c3c416f7d9b..f1d30248a17 100644
--- a/llvm/include/llvm/Support/Compiler.h
+++ b/llvm/include/llvm/Support/Compiler.h
@@ -394,11 +394,12 @@
#elif defined(__clang__) && defined(__powerpc64__)
// Clang, GCC, and all compatible compilers tend to use __thread. But we need
// to work aronud a bug in the combination of Clang's compilation of
-// local-dynamic TLS and the ppc64 linker relocations which we do by forcing to
-// global-dynamic (called in most documents "general dynamic").
+// global-dynamic and local-dynamic TLS and the ppc64 linker relocations which
+// we do by forcing initial-exec. While that mode isn't strictly sufficient for
+// all possible DSO use cases, it will usually work with glibc.
// FIXME: Make this conditional on the Clang version once this is fixed in
// top-of-tree.
-#define LLVM_THREAD_LOCAL __thread __attribute__((tls_model("global-dynamic")))
+#define LLVM_THREAD_LOCAL __thread __attribute__((tls_model("initial-exec")))
#else
#define LLVM_THREAD_LOCAL __thread
#endif
OpenPOWER on IntegriCloud