diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -175,7 +175,7 @@ }; if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, - options::OPT_shared)) { + options::OPT_shared, options::OPT_r)) { CmdArgs.push_back( Args.MakeArgString(ToolChain.GetFilePath(getCrt0Basename()))); @@ -232,6 +232,13 @@ CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-bE:") + ExportList)); } + if (Args.hasArg(options::OPT_r)) { + const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); + C.addCommand(std::make_unique( + JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, Inputs, Output)); + return; + } + // Add directory to library search path. Args.AddAllArgs(CmdArgs, options::OPT_L); ToolChain.AddFilePathLibArgs(Args, CmdArgs); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1693,6 +1693,8 @@ } case ToolChain::UNW_CompilerRT: if (TC.getTriple().isOSAIX()) { + if (Args.hasArg(options::OPT_r)) + break; // AIX only has libunwind as a shared library. So do not pass // anything in if -static is specified. if (LGT != LibGccType::StaticLibGcc)