From f4236bfdbdb6f8236a2efdc5cda5d7fa40786b9f Mon Sep 17 00:00:00 2001 From: George Karpenkov Date: Thu, 29 Jun 2017 19:52:33 +0000 Subject: [PATCH] [libFuzzer] Do not link in libFuzzer with -fsanitize=fuzzer when producing a shared object https://reviews.llvm.org/D34791 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@306733 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/ToolChains/CommonArgs.cpp | 3 ++- lib/Driver/ToolChains/Darwin.cpp | 2 +- test/Driver/fuzzer.c | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp index 1991b2ecd8..e8bb703054 100644 --- a/lib/Driver/ToolChains/CommonArgs.cpp +++ b/lib/Driver/ToolChains/CommonArgs.cpp @@ -617,7 +617,8 @@ bool tools::addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, NonWholeStaticRuntimes, HelperStaticRuntimes, RequiredSymbols); // Inject libfuzzer dependencies. - if (TC.getSanitizerArgs().needsFuzzer()) { + if (TC.getSanitizerArgs().needsFuzzer() + && !Args.hasArg(options::OPT_shared)) { addLibFuzzerRuntime(TC, Args, CmdArgs); } diff --git a/lib/Driver/ToolChains/Darwin.cpp b/lib/Driver/ToolChains/Darwin.cpp index bfe685e70d..13cda0d0a1 100644 --- a/lib/Driver/ToolChains/Darwin.cpp +++ b/lib/Driver/ToolChains/Darwin.cpp @@ -1053,7 +1053,7 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan"); if (Sanitize.needsTsanRt()) AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan"); - if (Sanitize.needsFuzzer()) + if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) AddFuzzerLinkArgs(Args, CmdArgs); if (Sanitize.needsStatsRt()) { StringRef OS = isTargetMacOS() ? "osx" : "iossim"; diff --git a/test/Driver/fuzzer.c b/test/Driver/fuzzer.c index e534a73a64..35bf4315c9 100644 --- a/test/Driver/fuzzer.c +++ b/test/Driver/fuzzer.c @@ -15,6 +15,10 @@ // // CHECK-LIBCXX-DARWIN: -lc++ +// Check that we don't link in libFuzzer.a when producing a shared object. +// RUN: %clang -fsanitize=fuzzer %s -shared -o %t.so -### 2>&1 | FileCheck --check-prefixes=CHECK-NOLIB-SO %s +// CHECK-NOLIB-SO-NOT: libLLVMFuzzer.a + int LLVMFuzzerTestOneInput(const char *Data, long Size) { return 0; } -- 2.40.0