diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-02-07 06:03:38 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-02-07 06:03:38 +0000 |
commit | f56c6d85ae8fe9892889f8737665e981592c90d9 (patch) | |
tree | 000c20bcfb611f8eda3de334931bf152d7eaf62f /clang/lib/Driver/Tools.cpp | |
parent | c917c7a7b19ffe618ded71b83d70f8abe68f4114 (diff) | |
download | llvm-f56c6d85ae8fe9892889f8737665e981592c90d9.zip llvm-f56c6d85ae8fe9892889f8737665e981592c90d9.tar.gz llvm-f56c6d85ae8fe9892889f8737665e981592c90d9.tar.bz2 |
Driver: adjust linker invocation for GNUTools
Adjust the driver to invoke the linker more similar to gcc. -dynamic-linker is
only passed if -static and -shared are not part of the compiler (driver)
invocation. Replicate the passing of -export-rdynamic as per the GCC link spec:
%{!static: %{rdynamic:-export-dynamic} %{!shared:-dynamic-linker ...}}
This behaviour is consistent across all the targets that are supported, so no
need to conditionalise it on the target.
Resolves PR24245.
llvm-svn: 260019
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index b16c672..eb0b78a 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -8900,13 +8900,16 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-shared"); } - if (Arch == llvm::Triple::arm || Arch == llvm::Triple::armeb || - Arch == llvm::Triple::thumb || Arch == llvm::Triple::thumbeb || - (!Args.hasArg(options::OPT_static) && - !Args.hasArg(options::OPT_shared))) { - CmdArgs.push_back("-dynamic-linker"); - CmdArgs.push_back(Args.MakeArgString( - D.DyldPrefix + getLinuxDynamicLinker(Args, ToolChain))); + if (!Args.hasArg(options::OPT_static)) { + if (Args.hasArg(options::OPT_rdynamic)) + CmdArgs.push_back("-export-dynamic"); + + if (!Args.hasArg(options::OPT_shared)) { + const std::string Loader = + D.DyldPrefix + getLinuxDynamicLinker(Args, ToolChain); + CmdArgs.push_back("-dynamic-linker"); + CmdArgs.push_back(Args.MakeArgString(Loader)); + } } CmdArgs.push_back("-o"); |