[LPM] Try again to appease powerpc64 in its self host. I've been unable
authorChandler Carruth <chandlerc@gmail.com>
Thu, 29 Jan 2015 02:34:17 +0000 (02:34 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 29 Jan 2015 02:34:17 +0000 (02:34 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227414 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Compiler.h

index c3c416f7d9baeb268f27f1bda4ac1c6f478f445b..f1d30248a17de0acb1b60a40ff0165919229d325 100644 (file)
 #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