summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChains/CommonArgs.cpp
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-07-14 06:46:46 +0000
committerFangrui Song <maskray@google.com>2019-07-14 06:46:46 +0000
commitc7f9559d659f5c889cd19921b57f0201109e494d (patch)
tree7e0db820700303575e25403d30d68b0021737b9a /clang/lib/Driver/ToolChains/CommonArgs.cpp
parent9450b0084af2cb0d4273e8accfdb3f11b947206e (diff)
downloadbcm5719-llvm-c7f9559d659f5c889cd19921b57f0201109e494d.tar.gz
bcm5719-llvm-c7f9559d659f5c889cd19921b57f0201109e494d.zip
[Driver] Simplify -lgcc & -lgcc_s
gcc defaults to -shared-libgcc in C++ mode. Letting getLibGccType() return SharedLibGcc simplifies the logic. llvm-svn: 366012
Diffstat (limited to 'clang/lib/Driver/ToolChains/CommonArgs.cpp')
-rw-r--r--clang/lib/Driver/ToolChains/CommonArgs.cpp30
1 files changed, 13 insertions, 17 deletions
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index d0c9d7d3962..b6a0afd7e5e 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1135,16 +1135,12 @@ bool tools::isObjCAutoRefCount(const ArgList &Args) {
enum class LibGccType { UnspecifiedLibGcc, StaticLibGcc, SharedLibGcc };
-static LibGccType getLibGccType(const ArgList &Args) {
- bool Static = Args.hasArg(options::OPT_static_libgcc) ||
- Args.hasArg(options::OPT_static) ||
- Args.hasArg(options::OPT_static_pie);
-
- bool Shared = Args.hasArg(options::OPT_shared_libgcc);
- if (Shared)
- return LibGccType::SharedLibGcc;
- if (Static)
+static LibGccType getLibGccType(const Driver &D, const ArgList &Args) {
+ if (Args.hasArg(options::OPT_static_libgcc) ||
+ Args.hasArg(options::OPT_static) || Args.hasArg(options::OPT_static_pie))
return LibGccType::StaticLibGcc;
+ if (Args.hasArg(options::OPT_shared_libgcc) || D.CCCIsCXX())
+ return LibGccType::SharedLibGcc;
return LibGccType::UnspecifiedLibGcc;
}
@@ -1170,8 +1166,8 @@ static void AddUnwindLibrary(const ToolChain &TC, const Driver &D,
UNW == ToolChain::UNW_None)
return;
- LibGccType LGT = getLibGccType(Args);
- bool AsNeeded = D.CCCIsCC() && LGT == LibGccType::UnspecifiedLibGcc &&
+ LibGccType LGT = getLibGccType(D, Args);
+ bool AsNeeded = LGT == LibGccType::UnspecifiedLibGcc &&
!TC.getTriple().isAndroid() && !TC.getTriple().isOSCygMing();
if (AsNeeded)
CmdArgs.push_back("--as-needed");
@@ -1180,11 +1176,11 @@ static void AddUnwindLibrary(const ToolChain &TC, const Driver &D,
case ToolChain::UNW_None:
return;
case ToolChain::UNW_Libgcc: {
- LibGccType LGT = getLibGccType(Args);
- if (LGT == LibGccType::UnspecifiedLibGcc || LGT == LibGccType::SharedLibGcc)
- CmdArgs.push_back("-lgcc_s");
- else if (LGT == LibGccType::StaticLibGcc)
+ LibGccType LGT = getLibGccType(D, Args);
+ if (LGT == LibGccType::StaticLibGcc)
CmdArgs.push_back("-lgcc_eh");
+ else
+ CmdArgs.push_back("-lgcc_s");
break;
}
case ToolChain::UNW_CompilerRT:
@@ -1200,7 +1196,7 @@ static void AddLibgcc(const ToolChain &TC, const Driver &D,
ArgStringList &CmdArgs, const ArgList &Args) {
bool isAndroid = TC.getTriple().isAndroid();
- LibGccType LGT = getLibGccType(Args);
+ LibGccType LGT = getLibGccType(D, Args);
bool LibGccFirst = (D.CCCIsCC() && LGT == LibGccType::UnspecifiedLibGcc) ||
LGT == LibGccType::StaticLibGcc;
if (LibGccFirst)
@@ -1216,7 +1212,7 @@ static void AddLibgcc(const ToolChain &TC, const Driver &D,
//
// NOTE: This fixes a link error on Android MIPS as well. The non-static
// libgcc for MIPS relies on _Unwind_Find_FDE and dl_iterate_phdr from libdl.
- if (isAndroid && getLibGccType(Args) != LibGccType::StaticLibGcc)
+ if (isAndroid && getLibGccType(D, Args) != LibGccType::StaticLibGcc)
CmdArgs.push_back("-ldl");
}
OpenPOWER on IntegriCloud