From: Kostya Kortchinsky Date: Tue, 26 Jun 2018 16:14:35 +0000 (+0000) Subject: [Driver] Do not add -lpthread & -lrt with -static-libsan on Android X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3b1b3173bf29177153759ffc6b858adefca26fe;p=clang [Driver] Do not add -lpthread & -lrt with -static-libsan on Android Summary: I am not sure anyone has tried to compile an application with sanitizers on Android with `-static-libsan`, and a recent NDK, but it fails with: ``` .../i686-linux-android/bin/ld.gold: error: cannot find -lpthread .../i686-linux-android/bin/ld.gold: error: cannot find -lrt ``` My understanding is that both are included in Bionic and as such are not needed, and actually error out. So remove the addition of those two in `linkSanitizerRuntimeDeps` when dealing with Android, and update the tests. I am unfamiliar with the evolution of the NDK and I am not sure if this has always been the case or if this is somewhat of a recent evolution. I'll let Android people chime in. Reviewers: eugenis, pirama, srhines Reviewed By: eugenis, srhines Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D48570 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@335620 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp index 98a36bcd83..1e093b25b9 100644 --- a/lib/Driver/ToolChains/CommonArgs.cpp +++ b/lib/Driver/ToolChains/CommonArgs.cpp @@ -564,8 +564,9 @@ void tools::linkSanitizerRuntimeDeps(const ToolChain &TC, // Force linking against the system libraries sanitizers depends on // (see PR15823 why this is necessary). CmdArgs.push_back("--no-as-needed"); - // There's no libpthread or librt on RTEMS. - if (TC.getTriple().getOS() != llvm::Triple::RTEMS) { + // There's no libpthread or librt on RTEMS & Android. + if (TC.getTriple().getOS() != llvm::Triple::RTEMS && + !TC.getTriple().isAndroid()) { CmdArgs.push_back("-lpthread"); if (TC.getTriple().getOS() != llvm::Triple::OpenBSD) CmdArgs.push_back("-lrt"); diff --git a/test/Driver/sanitizer-ld.c b/test/Driver/sanitizer-ld.c index e85a828b33..483c87a624 100644 --- a/test/Driver/sanitizer-ld.c +++ b/test/Driver/sanitizer-ld.c @@ -153,7 +153,8 @@ // // CHECK-ASAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" // CHECK-ASAN-ANDROID-STATICLIBASAN: libclang_rt.asan-arm-android.a" -// CHECK-ASAN-ANDROID-STATICLIBASAN: "-lpthread" +// CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lpthread" +// CHECK-ASAN-ANDROID-STATICLIBASAN-NOT: "-lrt" // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target arm-linux-androideabi -fuse-ld=ld -fsanitize=undefined \ @@ -175,7 +176,8 @@ // // CHECK-UBSAN-ANDROID-STATICLIBASAN: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" // CHECK-UBSAN-ANDROID-STATICLIBASAN: libclang_rt.ubsan_standalone-arm-android.a" -// CHECK-UBSAN-ANDROID-STATICLIBASAN: "-lpthread" +// CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lpthread" +// CHECK-UBSAN-ANDROID-STATICLIBASAN-NOT: "-lrt" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ @@ -735,7 +737,8 @@ // CHECK-SCUDO-ANDROID-STATIC: "-pie" // CHECK-SCUDO-ANDROID-STATIC: "--whole-archive" "{{.*}}libclang_rt.scudo-arm-android.a" "--no-whole-archive" // CHECK-SCUDO-ANDROID-STATIC-NOT: "-lstdc++" -// CHECK-SCUDO-ANDROID-STATIC: "-lpthread" +// CHECK-SCUDO-ANDROID-STATIC-NOT: "-lpthread" +// CHECK-SCUDO-ANDROID-STATIC-NOT: "-lrt" // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=hwaddress \