Skip to content

Commit a478b0a

Browse files
committed
[Android] Default to --rtlib=compiler-rt
By default, the driver uses the compiler-rt builtins and links with -l:libunwind.a. Restore the previous behavior by passing --rtlib=libgcc. Reviewed By: danalbert Differential Revision: https://reviews.llvm.org/D96404
1 parent 590ac0a commit a478b0a

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

clang/lib/Driver/ToolChains/Linux.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,12 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
363363
addPathIfExists(D, SysRoot + "/usr/lib", Paths);
364364
}
365365

366+
ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {
367+
if (getTriple().isAndroid())
368+
return ToolChain::RLT_CompilerRT;
369+
return Generic_ELF::GetDefaultRuntimeLibType();
370+
}
371+
366372
ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
367373
if (getTriple().isAndroid())
368374
return ToolChain::CST_Libcxx;

clang/lib/Driver/ToolChains/Linux.h

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
3535
llvm::opt::ArgStringList &CC1Args) const override;
3636
void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
3737
llvm::opt::ArgStringList &CC1Args) const override;
38+
RuntimeLibType GetDefaultRuntimeLibType() const override;
3839
CXXStdlibType GetDefaultCXXStdlibType() const override;
3940
bool
4041
IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override;

clang/test/Driver/linux-ld.c

+23-15
Original file line numberDiff line numberDiff line change
@@ -288,23 +288,23 @@
288288
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
289289
// RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-NONE %s
290290
// CHECK-CLANG-ANDROID-NONE: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
291-
// CHECK-CLANG-ANDROID-NONE: "-lgcc" "-ldl" "-lc"
291+
// CHECK-CLANG-ANDROID-NONE: "-l:libunwind.a" "-ldl" "-lc"
292292
//
293293
// RUN: %clang -shared -no-canonical-prefixes %s -### -o %t.o 2>&1 \
294294
// RUN: --target=aarch64-linux-android -rtlib=platform --unwindlib=platform \
295295
// RUN: --gcc-toolchain="" \
296296
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
297297
// RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-SHARED %s
298298
// CHECK-CLANG-ANDROID-SHARED: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
299-
// CHECK-CLANG-ANDROID-SHARED: "-lgcc" "-ldl" "-lc"
299+
// CHECK-CLANG-ANDROID-SHARED: "-l:libunwind.a" "-ldl" "-lc"
300300
//
301301
// RUN: %clang -static -no-canonical-prefixes %s -### -o %t.o 2>&1 \
302302
// RUN: --target=aarch64-linux-android -rtlib=platform --unwindlib=platform \
303303
// RUN: --gcc-toolchain="" \
304304
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
305305
// RUN: | FileCheck --check-prefix=CHECK-CLANG-ANDROID-STATIC %s
306306
// CHECK-CLANG-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
307-
// CHECK-CLANG-ANDROID-STATIC: "--start-group" "-lgcc" "-lc" "--end-group"
307+
// CHECK-CLANG-ANDROID-STATIC: "--start-group" "{{[^"]*}}{{/|\\\\}}libclang_rt.builtins-aarch64-android.a" "-l:libunwind.a" "-lc" "--end-group"
308308
//
309309
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
310310
// RUN: --target=x86_64-unknown-linux -rtlib=platform --unwindlib=platform \
@@ -1353,10 +1353,12 @@
13531353
// CHECK-ANDROID: "--enable-new-dtags"
13541354
// CHECK-ANDROID: "{{.*}}{{/|\\\\}}crtbegin_dynamic.o"
13551355
// CHECK-ANDROID: "-L[[SYSROOT]]/usr/lib"
1356-
// CHECK-ANDROID-NOT: "gcc_s"
1357-
// CHECK-ANDROID: "-lgcc"
1356+
// CHECK-ANDROID-NOT: "-lgcc_s"
1357+
// CHECK-ANDROID-NOT: "-lgcc"
1358+
// CHECK-ANDROID: "-l:libunwind.a"
13581359
// CHECK-ANDROID: "-ldl"
1359-
// CHECK-ANDROID-NOT: "gcc_s"
1360+
// CHECK-ANDROID-NOT: "-lgcc_s"
1361+
// CHECK-ANDROID-NOT: "-lgcc"
13601362
// CHECK-ANDROID: "{{.*}}{{/|\\\\}}crtend_android.o"
13611363
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
13621364
// RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \
@@ -1409,10 +1411,12 @@
14091411
// CHECK-ANDROID-SO-NOT: "-Bsymbolic"
14101412
// CHECK-ANDROID-SO: "{{.*}}{{/|\\\\}}crtbegin_so.o"
14111413
// CHECK-ANDROID-SO: "-L[[SYSROOT]]/usr/lib"
1412-
// CHECK-ANDROID-SO-NOT: "gcc_s"
1413-
// CHECK-ANDROID-SO: "-lgcc"
1414+
// CHECK-ANDROID-SO-NOT: "-lgcc_s"
1415+
// CHECK-ANDROID-SO-NOT: "-lgcc"
1416+
// CHECK-ANDROID-SO: "-l:libunwind.a"
14141417
// CHECK-ANDROID-SO: "-ldl"
1415-
// CHECK-ANDROID-SO-NOT: "gcc_s"
1418+
// CHECK-ANDROID-SO-NOT: "-lgcc_s"
1419+
// CHECK-ANDROID-SO-NOT: "-lgcc"
14161420
// CHECK-ANDROID-SO: "{{.*}}{{/|\\\\}}crtend_so.o"
14171421
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
14181422
// RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \
@@ -1463,10 +1467,12 @@
14631467
// CHECK-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
14641468
// CHECK-ANDROID-STATIC: "{{.*}}{{/|\\\\}}crtbegin_static.o"
14651469
// CHECK-ANDROID-STATIC: "-L[[SYSROOT]]/usr/lib"
1466-
// CHECK-ANDROID-STATIC-NOT: "gcc_s"
1467-
// CHECK-ANDROID-STATIC: "-lgcc"
1470+
// CHECK-ANDROID-STATIC-NOT: "-lgcc_eh"
1471+
// CHECK-ANDROID-STATIC-NOT: "-lgcc"
1472+
// CHECK-ANDROID-STATIC: "-l:libunwind.a"
14681473
// CHECK-ANDROID-STATIC-NOT: "-ldl"
1469-
// CHECK-ANDROID-STATIC-NOT: "gcc_s"
1474+
// CHECK-ANDROID-STATIC-NOT: "-lgcc_eh"
1475+
// CHECK-ANDROID-STATIC-NOT: "-lgcc"
14701476
// CHECK-ANDROID-STATIC: "{{.*}}{{/|\\\\}}crtend_android.o"
14711477
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
14721478
// RUN: --target=arm-linux-androideabi -rtlib=platform --unwindlib=platform \
@@ -1519,9 +1525,11 @@
15191525
// CHECK-ANDROID-PIE: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
15201526
// CHECK-ANDROID-PIE: "{{.*}}{{/|\\\\}}crtbegin_dynamic.o"
15211527
// CHECK-ANDROID-PIE: "-L[[SYSROOT]]/usr/lib"
1522-
// CHECK-ANDROID-PIE-NOT: "gcc_s"
1523-
// CHECK-ANDROID-PIE: "-lgcc"
1524-
// CHECK-ANDROID-PIE-NOT: "gcc_s"
1528+
// CHECK-ANDROID-PIE-NOT: "-lgcc_s"
1529+
// CHECK-ANDROID-PIE-NOT: "-lgcc"
1530+
// CHECK-ANDROID-PIE: "-l:libunwind.a"
1531+
// CHECK-ANDROID-PIE-NOT: "-lgcc_s"
1532+
// CHECK-ANDROID-PIE-NOT: "-lgcc"
15251533
// CHECK-ANDROID-PIE: "{{.*}}{{/|\\\\}}crtend_android.o"
15261534
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
15271535
// RUN: --target=arm-linux-androideabi \

0 commit comments

Comments
 (0)