summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2015-01-29 19:08:51 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2015-01-29 19:08:51 +0000
commitf32a1acee89983cf992aba8b1ce3775f4b0bba94 (patch)
tree4f1fbc3c734f227804daa0cae0a8dae5e39f5a0b /clang/lib/Driver/Tools.cpp
parentd5bb7e142bdbe7a992156a8ada6531442da1e7eb (diff)
downloadbcm5719-llvm-f32a1acee89983cf992aba8b1ce3775f4b0bba94.tar.gz
bcm5719-llvm-f32a1acee89983cf992aba8b1ce3775f4b0bba94.zip
[PowerPC] Work around TLS linker bug
Work around a bug in GNU ld (and gold) linker versions up to 2.25 that may mis-optimize code generated by this version of clang/LLVM to access general-dynamic or local-dynamic TLS variables. Bug is fixed here: https://sourceware.org/ml/binutils/2015-01/msg00318.html llvm-svn: 227480
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 1ff5be7b034..2258f69ef8e 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -7515,6 +7515,13 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
D.DyldPrefix + getLinuxDynamicLinker(Args, ToolChain)));
}
+ // Work around a bug in GNU ld (and gold) linker versions up to 2.25
+ // that may mis-optimize code generated by this version of clang/LLVM
+ // to access general-dynamic or local-dynamic TLS variables.
+ if (ToolChain.getArch() == llvm::Triple::ppc64 ||
+ ToolChain.getArch() == llvm::Triple::ppc64le)
+ CmdArgs.push_back("--no-tls-optimize");
+
CmdArgs.push_back("-o");
CmdArgs.push_back(Output.getFilename());
OpenPOWER on IntegriCloud