From a0650715e75be11ed813da03ad5b0eccfebed6c3 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Fri, 26 Sep 2014 21:22:08 +0000 Subject: [PATCH] Don't link in sanitizer runtimes if -nostdlib/-nodefaultlibs is provided. It makes no sense to link in sanitizer runtimes in this case: the user probably doesn't want to see any system/toolchain libs in his link if he provides these flags, and the link will most likely fail anyway - as sanitizer runtimes depend on libpthread, libdl, libc etc. Also, see discussion in https://code.google.com/p/address-sanitizer/issues/detail?id=344 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218541 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 4 ++++ test/Driver/sanitizer-ld.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 8d9af96913..20c88aecc3 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2243,6 +2243,10 @@ collectSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, // C runtime, etc). Returns true if sanitizer system deps need to be linked in. static bool addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) { + // Don't link in any sanitizer runtimes if we have no system libraries. + if (Args.hasArg(options::OPT_nostdlib) || + Args.hasArg(options::OPT_nodefaultlibs)) + return false; SmallVector SharedRuntimes, StaticRuntimes, HelperStaticRuntimes; collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes, diff --git a/test/Driver/sanitizer-ld.c b/test/Driver/sanitizer-ld.c index dc8e93e50f..a7ef4c744d 100644 --- a/test/Driver/sanitizer-ld.c +++ b/test/Driver/sanitizer-ld.c @@ -301,3 +301,10 @@ // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan + +// RUN: %clang -nostdlib -fsanitize=address %s -### -o %t.o 2>&1 \ +// RUN: -target x86_64-unknown-linux \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-NOSTDLIB %s +// CHECK-NOSTDLIB: "{{.*}}ld{{(.exe)?}}" +// CHECK-NOSTDLIB-NOT: libclang_rt.asan -- 2.40.0