]> granicus.if.org Git - clang/commitdiff
[libFuzzer] Do not link in libFuzzer with -fsanitize=fuzzer when producing a shared...
authorGeorge Karpenkov <ekarpenkov@apple.com>
Thu, 29 Jun 2017 19:52:33 +0000 (19:52 +0000)
committerGeorge Karpenkov <ekarpenkov@apple.com>
Thu, 29 Jun 2017 19:52:33 +0000 (19:52 +0000)
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
lib/Driver/ToolChains/Darwin.cpp
test/Driver/fuzzer.c

index 1991b2ecd8faaab73167a2473b34761429bd5558..e8bb703054de5b3cf84fc6c48435aacf95854bcf 100644 (file)
@@ -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);
   }
 
index bfe685e70df7bb1a78cdfe0ddd22a9eb1de886e4..13cda0d0a1fe7be34c7b9ef6e55136276c3e7bfd 100644 (file)
@@ -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";
index e534a73a647f9d3c00870f0d63e40f1c65e30ed5..35bf4315c9f4c189a27eceb0003b8b4ffc0e06cb 100644 (file)
 //
 // 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;
 }