diff options
author | Sterling Augustine <saugustine@google.com> | 2019-01-10 22:25:58 +0000 |
---|---|---|
committer | Sterling Augustine <saugustine@google.com> | 2019-01-10 22:25:58 +0000 |
commit | 9cedc71c6c932d740160a10164361882fee406cb (patch) | |
tree | ec36d8ce6660a3baff96b242fbb4987098ea1280 | |
parent | 898c95d5a806bc78fbad0256e54fa3b79d3e5327 (diff) | |
download | clang-9cedc71c6c932d740160a10164361882fee406cb.tar.gz |
Properly support -shared-libgcc.
This revision was revied in D55016.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@350900 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Driver/ToolChains/CommonArgs.cpp | 9 | ||||
-rw-r--r-- | test/Driver/linux-ld.c | 19 |
2 files changed, 10 insertions, 18 deletions
diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp index dcafc5d1ab..cada16174f 100644 --- a/lib/Driver/ToolChains/CommonArgs.cpp +++ b/lib/Driver/ToolChains/CommonArgs.cpp @@ -1159,11 +1159,8 @@ static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, 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; + bool SharedLibgcc = Args.hasArg(options::OPT_shared_libgcc); + bool UnspecifiedLibgcc = !StaticLibgcc && !SharedLibgcc; // Gcc adds libgcc arguments in various ways: // @@ -1180,7 +1177,7 @@ static void AddLibgcc(const llvm::Triple &Triple, const Driver &D, if (LibGccFirst) CmdArgs.push_back("-lgcc"); - bool AsNeeded = D.CCCIsCC() && !StaticLibgcc && !isAndroid && !isCygMing; + bool AsNeeded = D.CCCIsCC() && UnspecifiedLibgcc && !isAndroid && !isCygMing; if (AsNeeded) CmdArgs.push_back("--as-needed"); diff --git a/test/Driver/linux-ld.c b/test/Driver/linux-ld.c index dc2f775abe..3ab81be490 100644 --- a/test/Driver/linux-ld.c +++ b/test/Driver/linux-ld.c @@ -211,24 +211,19 @@ // RUN: --gcc-toolchain="" \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ // RUN: | FileCheck --check-prefix=CHECK-CLANG-SHARED-LIBGCC %s -// CHECK-CLANG-SHARED-LIBGCC: warning: argument unused during compilation: '-shared-libgcc' -// This will be the correct check once the driver supports -shared-libgcc -// SKIP-CHECK-CLANG-SHARED-LIBGCC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" -// SKIP-CHECK-CLANG-SHARED-LIBGCC: "-lgcc_s" "-lgcc" -// SKIP-CHECK-CLANG-SHARED-LIBGCC: "-lc" -// SKIP-CHECK-CLANG-SHARED-LIBGCC: "-lgcc_s" "-lgcc" +// CHECK-CLANG-SHARED-LIBGCC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-CLANG-SHARED-LIBGCC: "-lgcc_s" "-lgcc" +// CHECK-CLANG-SHARED-LIBGCC: "-lc" +// CHECK-CLANG-SHARED-LIBGCC: "-lgcc_s" "-lgcc" // // RUN: %clang -shared-libgcc -dynamic -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: --target=x86_64-unknown-linux -rtlib=platform \ // RUN: --gcc-toolchain="" \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ // RUN: | FileCheck --check-prefix=CHECK-CLANG-SHARED-LIBGCC-DYNAMIC %s -// CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: warning: argument unused during compilation: '-shared-libgcc' -// CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" -// This will be the correct check once the driver supports -shared-libgcc -// SKIP-CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lgcc_s" "-lgcc" -// SKIP-CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lc" -// SKIP-CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lgcc_s" "-lgcc" +// CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lgcc_s" "-lgcc" +// CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lc" +// CHECK-CLANG-SHARED-LIBGCC-DYNAMIC: "-lgcc_s" "-lgcc" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: --target=aarch64-linux-android -rtlib=platform \ |