r306733 - [libFuzzer] Do not link in libFuzzer with -fsanitize=fuzzer when producing a shared object

George Karpenkov via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 29 12:52:33 PDT 2017


Author: george.karpenkov
Date: Thu Jun 29 12:52:33 2017
New Revision: 306733

URL: http://llvm.org/viewvc/llvm-project?rev=306733&view=rev
Log:
[libFuzzer] Do not link in libFuzzer with -fsanitize=fuzzer when producing a shared object

https://reviews.llvm.org/D34791

Modified:
    cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
    cfe/trunk/lib/Driver/ToolChains/Darwin.cpp
    cfe/trunk/test/Driver/fuzzer.c

Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=306733&r1=306732&r2=306733&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp Thu Jun 29 12:52:33 2017
@@ -617,7 +617,8 @@ bool tools::addSanitizerRuntimes(const T
                            NonWholeStaticRuntimes, HelperStaticRuntimes,
                            RequiredSymbols);
   // Inject libfuzzer dependencies.
-  if (TC.getSanitizerArgs().needsFuzzer()) {
+  if (TC.getSanitizerArgs().needsFuzzer()
+      && !Args.hasArg(options::OPT_shared)) {
     addLibFuzzerRuntime(TC, Args, CmdArgs);
   }
 

Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=306733&r1=306732&r2=306733&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp Thu Jun 29 12:52:33 2017
@@ -1053,7 +1053,7 @@ void DarwinClang::AddLinkRuntimeLibArgs(
     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";

Modified: cfe/trunk/test/Driver/fuzzer.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fuzzer.c?rev=306733&r1=306732&r2=306733&view=diff
==============================================================================
--- cfe/trunk/test/Driver/fuzzer.c (original)
+++ cfe/trunk/test/Driver/fuzzer.c Thu Jun 29 12:52:33 2017
@@ -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;
 }




More information about the cfe-commits mailing list