diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2015-01-29 19:08:51 +0000 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2015-01-29 19:08:51 +0000 |
commit | f32a1acee89983cf992aba8b1ce3775f4b0bba94 (patch) | |
tree | 4f1fbc3c734f227804daa0cae0a8dae5e39f5a0b /clang/lib/Driver/Tools.cpp | |
parent | d5bb7e142bdbe7a992156a8ada6531442da1e7eb (diff) | |
download | bcm5719-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.cpp | 7 |
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()); |