summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSterling Augustine <saugustine@google.com>2018-08-30 20:42:49 +0000
committerSterling Augustine <saugustine@google.com>2018-08-30 20:42:49 +0000
commit3572b0bd5d582e9a7049abec5aad8ec8afb63a9b (patch)
treec6e511fb630b45b1874f5af0143d9a3ce96a437a /clang/lib
parentc0445098519defc4bd13624095fac92977c9cfe4 (diff)
downloadbcm5719-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.cpp42
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
OpenPOWER on IntegriCloud