[llvm] r255732 - [sancov] blacklist support.

Mike Aizatsky via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 15 16:31:48 PST 2015


Author: aizatsky
Date: Tue Dec 15 18:31:48 2015
New Revision: 255732

URL: http://llvm.org/viewvc/llvm-project?rev=255732&view=rev
Log:
[sancov] blacklist support.

Summary:
Using the blacklist the user can filter own unwanted functions
from all outputs. By default blacklist contains "fun:__sancov*" line.

Differential Revision: http://reviews.llvm.org/D15364

Added:
    llvm/trunk/test/tools/sancov/Inputs/blacklist.txt
    llvm/trunk/test/tools/sancov/blacklist.test
Modified:
    llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64
    llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64-1.sancov
    llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64.sancov
    llvm/trunk/test/tools/sancov/Inputs/test.cpp
    llvm/trunk/test/tools/sancov/not_covered_functions.test
    llvm/trunk/test/tools/sancov/print.test
    llvm/trunk/tools/sancov/sancov.cc

Added: llvm/trunk/test/tools/sancov/Inputs/blacklist.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/Inputs/blacklist.txt?rev=255732&view=auto
==============================================================================
--- llvm/trunk/test/tools/sancov/Inputs/blacklist.txt (added)
+++ llvm/trunk/test/tools/sancov/Inputs/blacklist.txt Tue Dec 15 18:31:48 2015
@@ -0,0 +1 @@
+fun:bar*

Modified: llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
Binary files llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64 (original) and llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64 Tue Dec 15 18:31:48 2015 differ

Modified: llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64-1.sancov
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64-1.sancov?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
Binary files llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64-1.sancov (original) and llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64-1.sancov Tue Dec 15 18:31:48 2015 differ

Modified: llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64.sancov
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64.sancov?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
Binary files llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64.sancov (original) and llvm/trunk/test/tools/sancov/Inputs/test-linux_x86_64.sancov Tue Dec 15 18:31:48 2015 differ

Modified: llvm/trunk/test/tools/sancov/Inputs/test.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/Inputs/test.cpp?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/Inputs/test.cpp (original)
+++ llvm/trunk/test/tools/sancov/Inputs/test.cpp Tue Dec 15 18:31:48 2015
@@ -1,5 +1,5 @@
 // compile & generate coverage data using:
-// clang++ -g -o test-linux_x86_64 -fsanitize=address -fsanitize-coverage=edge *.cpp
+// clang++ -g -o test-linux_x86_64 -fsanitize=address -fsanitize-coverage=bb test.cpp foo.cpp
 // ASAN_OPTIONS="coverage=1" ./test-linux_x86_64 && mv test-linux_x86_64.*.sancov test-linux_x86_64.sancov
 // ASAN_OPTIONS="coverage=1" ./test-linux_x86_64 1 && mv test-linux_x86_64.*.sancov test-linux_x86_64-1.sancov
 

Added: llvm/trunk/test/tools/sancov/blacklist.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/blacklist.test?rev=255732&view=auto
==============================================================================
--- llvm/trunk/test/tools/sancov/blacklist.test (added)
+++ llvm/trunk/test/tools/sancov/blacklist.test Tue Dec 15 18:31:48 2015
@@ -0,0 +1,5 @@
+REQUIRES: x86_64-linux
+RUN: sancov -obj %p/Inputs/test-linux_x86_64 -covered-functions -blacklist %p/Inputs/blacklist.txt %p/Inputs/test-linux_x86_64.sancov | FileCheck %s
+
+CHECK-NOT: Inputs{{[/\\]}}test.cpp:12 bar(std::string)
+CHECK: Inputs{{[/\\]}}test.cpp:14 main

Modified: llvm/trunk/test/tools/sancov/not_covered_functions.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/not_covered_functions.test?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/not_covered_functions.test (original)
+++ llvm/trunk/test/tools/sancov/not_covered_functions.test Tue Dec 15 18:31:48 2015
@@ -3,5 +3,6 @@ RUN: sancov -obj %p/Inputs/test-linux_x8
 RUN: sancov -obj %p/Inputs/test-linux_x86_64 -not-covered-functions %p/Inputs/test-linux_x86_64-1.sancov | FileCheck --check-prefix=CHECK1 --allow-empty %s
 
 CHECK: Inputs{{[/\\]}}foo.cpp:5 foo()
-CHECK1-NOT: {{.}}*
+CHECK-NOT: {{.*__sanitizer.*}}
+CHECK1-NOT: {{.+}}
 

Modified: llvm/trunk/test/tools/sancov/print.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/sancov/print.test?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
--- llvm/trunk/test/tools/sancov/print.test (original)
+++ llvm/trunk/test/tools/sancov/print.test Tue Dec 15 18:31:48 2015
@@ -1,11 +1,11 @@
 REQUIRES: x86_64-linux
 RUN: sancov -obj %p/Inputs/test-linux_x86_64 -print %p/Inputs/test-linux_x86_64.sancov | FileCheck %s
 
-CHECK: 0x4db18b
-CHECK: 0x4db2d2
-CHECK: 0x4db322
-CHECK: 0x4db376
-CHECK: 0x4db3bd
-CHECK: 0x4db3f4
-CHECK: 0x4db427
-CHECK: 0x4db45a
+CHECK: 0x4dbe2b
+CHECK: 0x4dbf72
+CHECK: 0x4dbfec
+CHECK: 0x4dc033
+CHECK: 0x4dc06a
+CHECK: 0x4dc09d
+CHECK: 0x4dc0d0
+

Modified: llvm/trunk/tools/sancov/sancov.cc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cc?rev=255732&r1=255731&r2=255732&view=diff
==============================================================================
--- llvm/trunk/tools/sancov/sancov.cc (original)
+++ llvm/trunk/tools/sancov/sancov.cc Tue Dec 15 18:31:48 2015
@@ -34,6 +34,7 @@
 #include "llvm/Support/Path.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Signals.h"
+#include "llvm/Support/SpecialCaseList.h"
 #include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/TargetSelect.h"
 #include "llvm/Support/ToolOutputFile.h"
@@ -80,6 +81,16 @@ static cl::opt<std::string> ClStripPathP
     "strip_path_prefix", cl::init(""),
     cl::desc("Strip this prefix from file paths in reports."));
 
+static cl::opt<std::string>
+    ClBlacklist("blacklist", cl::init(""),
+                cl::desc("Blacklist file (sanitizer blacklist format)."));
+
+static cl::opt<bool> ClUseDefaultBlacklist(
+    "use_default_blacklist", cl::init(true), cl::Hidden,
+    cl::desc("Controls if default blacklist should be used."));
+
+static const char *const DefaultBlacklist = "fun:__sanitizer_*";
+
 // --------- FORMAT SPECIFICATION ---------
 
 struct FileHeader {
@@ -169,8 +180,8 @@ computeFunctionsMap(const std::set<uint6
   for (auto Addr : Addrs) {
     auto InliningInfo = Symbolizer.symbolizeInlinedCode(ClBinaryName, Addr);
     FailIfError(InliningInfo);
-    for (uint32_t i = 0; i < InliningInfo->getNumberOfFrames(); ++i) {
-      auto FrameInfo = InliningInfo->getFrame(i);
+    for (uint32_t I = 0; I < InliningInfo->getNumberOfFrames(); ++I) {
+      auto FrameInfo = InliningInfo->getFrame(I);
       SmallString<256> FileName(FrameInfo.FileName);
       sys::path::remove_dots(FileName, /* remove_dot_dot */ true);
       FileLoc Loc = {FileName.str(), FrameInfo.Line};
@@ -186,7 +197,7 @@ computeFunctionsMap(const std::set<uint6
 std::set<FunctionLoc> computeFunctionLocs(const std::set<uint64_t> &Addrs) {
   std::map<FileLoc, std::string> Fns = computeFunctionsMap(Addrs);
 
-  std::set<FunctionLoc> result;
+  std::set<FunctionLoc> Result;
   std::string LastFileName;
   std::set<std::string> ProcessedFunctions;
 
@@ -201,10 +212,10 @@ std::set<FunctionLoc> computeFunctionLoc
     if (!ProcessedFunctions.insert(FunctionName).second)
       continue;
 
-    result.insert(FunctionLoc{P.first, P.second});
+    Result.insert(FunctionLoc{P.first, P.second});
   }
 
-  return result;
+  return Result;
 }
 
 // Locate __sanitizer_cov* function addresses that are used for coverage
@@ -346,9 +357,41 @@ std::set<uint64_t> getCoveragePoints(std
   return Result;
 }
 
+static std::unique_ptr<SpecialCaseList> createDefaultBlacklist() {
+  if (!ClUseDefaultBlacklist) 
+    return std::unique_ptr<SpecialCaseList>();
+  std::unique_ptr<MemoryBuffer> MB =
+      MemoryBuffer::getMemBuffer(DefaultBlacklist);
+  std::string Error;
+  auto Blacklist = SpecialCaseList::create(MB.get(), Error);
+  FailIfNotEmpty(Error);
+  return Blacklist;
+}
+
+static std::unique_ptr<SpecialCaseList> createUserBlacklist() {
+  if (ClBlacklist.empty())
+    return std::unique_ptr<SpecialCaseList>();
+
+  return SpecialCaseList::createOrDie({{ClBlacklist}});
+}
+
 static void printFunctionLocs(const std::set<FunctionLoc> &FnLocs,
                               raw_ostream &OS) {
+  std::unique_ptr<SpecialCaseList> DefaultBlacklist = createDefaultBlacklist();
+  std::unique_ptr<SpecialCaseList> UserBlacklist = createUserBlacklist();
+
   for (const FunctionLoc &FnLoc : FnLocs) {
+    if (DefaultBlacklist &&
+        DefaultBlacklist->inSection("fun", FnLoc.FunctionName))
+      continue;
+    if (DefaultBlacklist &&
+        DefaultBlacklist->inSection("src", FnLoc.Loc.FileName))
+      continue;
+    if (UserBlacklist && UserBlacklist->inSection("fun", FnLoc.FunctionName))
+      continue;
+    if (UserBlacklist && UserBlacklist->inSection("src", FnLoc.Loc.FileName))
+      continue;
+
     OS << stripPathPrefix(FnLoc.Loc.FileName) << ":" << FnLoc.Loc.Line << " "
        << FnLoc.FunctionName << "\n";
   }




More information about the llvm-commits mailing list