Skip to content

Commit 4e81ee4

Browse files
authored
[Driver] Use AddRunTimeLibs on Solaris (#137596)
When linking `libomp.so` on Solaris, I encountered ``` clang: warning: argument unused during compilation: '-static-libgcc' [-Wunused-command-line-argument] ``` This happens because `Solaris.cpp` (`solaris::Linker::ConstructJob`) links `-lgcc_s` and `-lgcc` on its own instead of using the common `CommonArgs.cpp` (`tools::AddRunTimeLibs`) which handles `-static-libgcc` out of the box. This patch switches to `AddRunTimeLibs` and adds a test for `-static-libgcc` handling. In `solaris-ld.c`, a few tests had to be adjusted because `-lgcc` is now linked before `-lgcc_s`. Tested on `amd64-pc-solaris2.11` and `sparcv9-sun-solaris2.11`.
1 parent f35e172 commit 4e81ee4

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

clang/lib/Driver/ToolChains/Solaris.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,10 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA,
243243
CmdArgs.push_back("-latomic");
244244
addAsNeededOption(ToolChain, Args, CmdArgs, false);
245245
}
246-
addAsNeededOption(ToolChain, Args, CmdArgs, true);
247-
CmdArgs.push_back("-lgcc_s");
248-
addAsNeededOption(ToolChain, Args, CmdArgs, false);
246+
247+
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
249248
CmdArgs.push_back("-lc");
250-
if (!Args.hasArg(options::OPT_shared)) {
251-
CmdArgs.push_back("-lgcc");
252-
}
249+
253250
const SanitizerArgs &SA = ToolChain.getSanitizerArgs(Args);
254251
if (NeedsSanitizerDeps) {
255252
linkSanitizerRuntimeDeps(ToolChain, Args, CmdArgs);

clang/test/Driver/solaris-ld.c

+13-4
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
// CHECK-LD-SPARC32-SAME: "-L[[SYSROOT]]/usr/lib"
2121
// CHECK-LD: "-z" "ignore" "-latomic" "-z" "record"
2222
// CHECK-GLD: "--as-needed" "-latomic" "--no-as-needed"
23+
// CHECK-LD-SPARC32-SAME: "-lgcc"
2324
// CHECK-LD: "-z" "ignore" "-lgcc_s" "-z" "record"
2425
// CHECK-GLD: "--as-needed" "-lgcc_s" "--no-as-needed"
2526
// CHECK-LD-SPARC32-SAME: "-lc"
26-
// CHECK-LD-SPARC32-SAME: "-lgcc"
2727
// CHECK-LD-SPARC32-SAME: "[[SYSROOT]]/usr/gcc/4.8/lib/gcc/sparc-sun-solaris2.11/4.8.2{{/|\\\\}}crtend.o"
2828
// CHECK-LD-SPARC32-SAME: "[[SYSROOT]]/usr/lib{{/|\\\\}}crtn.o"
2929

@@ -42,9 +42,9 @@
4242
// CHECK-LD-SPARC64-SAME: "-L[[SYSROOT]]/usr/gcc/4.8/lib/gcc/sparc-sun-solaris2.11/4.8.2/../../../sparcv9"
4343
// CHECK-LD-SPARC64-SAME: "-L[[SYSROOT]]/usr/lib/sparcv9"
4444
// CHECK-LD-SPARC64-NOT: "-latomic"
45+
// CHECK-LD-SPARC64-SAME: "-lgcc"
4546
// CHECK-LD-SPARC64-SAME: "-lgcc_s"
4647
// CHECK-LD-SPARC64-SAME: "-lc"
47-
// CHECK-LD-SPARC64-SAME: "-lgcc"
4848
// CHECK-LD-SPARC64-SAME: "[[SYSROOT]]/usr/gcc/4.8/lib/gcc/sparc-sun-solaris2.11/4.8.2/sparcv9{{/|\\\\}}crtend.o"
4949
// CHECK-LD-SPARC64-SAME: "[[SYSROOT]]/usr/lib/sparcv9{{/|\\\\}}crtn.o"
5050

@@ -63,9 +63,9 @@
6363
// CHECK-LD-X32-SAME: "-L[[SYSROOT]]/usr/gcc/4.9/lib/gcc/i386-pc-solaris2.11/4.9.4/../../.."
6464
// CHECK-LD-X32-SAME: "-L[[SYSROOT]]/usr/lib"
6565
// CHECK-LD-X32-NOT: "-latomic"
66+
// CHECK-LD-X32-SAME: "-lgcc"
6667
// CHECK-LD-X32-SAME: "-lgcc_s"
6768
// CHECK-LD-X32-SAME: "-lc"
68-
// CHECK-LD-X32-SAME: "-lgcc"
6969
// CHECK-LD-X32-SAME: "[[SYSROOT]]/usr/gcc/4.9/lib/gcc/i386-pc-solaris2.11/4.9.4{{/|\\\\}}crtend.o"
7070
// CHECK-LD-X32-SAME: "[[SYSROOT]]/usr/lib{{/|\\\\}}crtn.o"
7171

@@ -85,9 +85,9 @@
8585
// CHECK-LD-X64-SAME: "-L[[SYSROOT]]/usr/gcc/4.9/lib/gcc/i386-pc-solaris2.11/4.9.4/../../../amd64"
8686
// CHECK-LD-X64-SAME: "-L[[SYSROOT]]/usr/lib/amd64"
8787
// CHECK-LD-X64-NOT: "-latomic"
88+
// CHECK-LD-X64-SAME: "-lgcc"
8889
// CHECK-LD-X64-SAME: "-lgcc_s"
8990
// CHECK-LD-X64-SAME: "-lc"
90-
// CHECK-LD-X64-SAME: "-lgcc"
9191
// CHECK-LD-X64-SAME: "[[SYSROOT]]/usr/gcc/4.9/lib/gcc/i386-pc-solaris2.11/4.9.4/amd64{{/|\\\\}}crtend.o"
9292
// CHECK-LD-X64-SAME: "[[SYSROOT]]/usr/lib/amd64{{/|\\\\}}crtn.o"
9393

@@ -101,6 +101,15 @@
101101
// CHECK-SPARC32-SHARED-SAME: "-lc"
102102
// CHECK-SPARC32-SHARED-NOT: "-lgcc"
103103

104+
/// Check that -static-libgcc is supported.
105+
// RUN: %clang -### %s --target=sparc-sun-solaris2.11 \
106+
// RUN: -static-libgcc \
107+
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree 2>&1 \
108+
// RUN: | FileCheck --check-prefixes=CHECK-STATIC-LIBGCC %s
109+
// CHECK-STATIC-LIBGCC-NOT: warning: argument unused during compilation: '-static-libgcc'
110+
// CHECK-STATIC-LIBGCC: "-lgcc" "-lgcc_eh"
111+
// CHECK-STATIC-LIBGCC-NOT: "-lgcc_s"
112+
104113
// Check that libm is only linked with clang++.
105114
// RUN: %clang -### %s --target=sparc-sun-solaris2.11 \
106115
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree 2>&1 \

0 commit comments

Comments
 (0)