diff options
author | Sterling Augustine <saugustine@google.com> | 2018-08-30 20:42:49 +0000 |
---|---|---|
committer | Sterling Augustine <saugustine@google.com> | 2018-08-30 20:42:49 +0000 |
commit | 3572b0bd5d582e9a7049abec5aad8ec8afb63a9b (patch) | |
tree | c6e511fb630b45b1874f5af0143d9a3ce96a437a /clang/lib | |
parent | c0445098519defc4bd13624095fac92977c9cfe4 (diff) | |
download | bcm5719-llvm-3572b0bd5d582e9a7049abec5aad8ec8afb63a9b.tar.gz bcm5719-llvm-3572b0bd5d582e9a7049abec5aad8ec8afb63a9b.zip |
Revert r341107. That change breaks lto-android in a way is untested.
llvm-svn: 341114
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/ToolChains/CommonArgs.cpp | 42 |
1 files changed, 12 insertions, 30 deletions
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 865717427e3..1e093b25b90 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1126,41 +1126,23 @@ static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, bool IsIAMCU = Triple.isOSIAMCU(); bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) || Args.hasArg(options::OPT_static); - // The driver ignores -shared-libgcc and therefore treats such cases as - // unspecified. Breaking out the two variables as below makes the current - // behavior explicit. - bool UnspecifiedLibgcc = !StaticLibgcc; - bool SharedLibgcc = !StaticLibgcc; - - // Gcc adds libgcc arguments in various ways: - // - // gcc <none>: -lgcc --as-needed -lgcc_s --no-as-needed - // g++ <none>: -lgcc_s -lgcc - // gcc shared: -lgcc_s -lgcc - // g++ shared: -lgcc_s -lgcc - // gcc static: -lgcc -lgcc_eh - // g++ static: -lgcc -lgcc_eh - // - // Also, certain targets need additional adjustments. - - bool LibGccFirst = (D.CCCIsCC() && UnspecifiedLibgcc) || StaticLibgcc; - if (LibGccFirst) + if (!D.CCCIsCXX()) CmdArgs.push_back("-lgcc"); - bool AsNeeded = D.CCCIsCC() && !StaticLibgcc && !isCygMing; - if (AsNeeded) - CmdArgs.push_back("--as-needed"); - - if (UnspecifiedLibgcc || SharedLibgcc) + if (StaticLibgcc || isAndroid) { + if (D.CCCIsCXX()) + CmdArgs.push_back("-lgcc"); + } else { + if (!D.CCCIsCXX() && !isCygMing) + CmdArgs.push_back("--as-needed"); CmdArgs.push_back("-lgcc_s"); + if (!D.CCCIsCXX() && !isCygMing) + CmdArgs.push_back("--no-as-needed"); + } - else if (StaticLibgcc && !isAndroid && !IsIAMCU) + if (StaticLibgcc && !isAndroid && !IsIAMCU) CmdArgs.push_back("-lgcc_eh"); - - if (AsNeeded) - CmdArgs.push_back("--no-as-needed"); - - if (!LibGccFirst) + else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX()) CmdArgs.push_back("-lgcc"); // According to Android ABI, we have to link with libdl if we are |