]> granicus.if.org Git - llvm/commitdiff
[libFuzzer] enable -fsanitize-coverage=pc-table for all tests
authorKostya Serebryany <kcc@google.com>
Tue, 1 Aug 2017 00:48:44 +0000 (00:48 +0000)
committerKostya Serebryany <kcc@google.com>
Tue, 1 Aug 2017 00:48:44 +0000 (00:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309646 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/FuzzerTracePC.cpp
lib/Fuzzer/FuzzerTracePC.h
lib/Fuzzer/test/CMakeLists.txt
lib/Fuzzer/test/inline-8bit-counters.test

index 1c4c24032fcc9b3c9d2db4c2846b7752eceffcf9..1cfd3f3ecff1738fbdc472075b73a30067952206 100644 (file)
@@ -72,7 +72,7 @@ void TracePC::HandlePCsInit(const uint8_t *Start, const uint8_t *Stop) {
   if (NumPCTables && ModulePCTable[NumPCTables - 1].Start == B) return;
   assert(NumPCTables < sizeof(ModulePCTable) / sizeof(ModulePCTable[0]));
   ModulePCTable[NumPCTables++] = {B, E};
-  NumPCsInPCTables = E - B;
+  NumPCsInPCTables += E - B;
 }
 
 void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) {
@@ -95,26 +95,36 @@ void TracePC::HandleInit(uint32_t *Start, uint32_t *Stop) {
 
 void TracePC::PrintModuleInfo() {
   if (NumGuards) {
-    Printf("INFO: Loaded %zd modules (%zd guards): ", NumModules, NumGuards);
+    Printf("INFO: Loaded %zd modules   (%zd guards): ", NumModules, NumGuards);
     for (size_t i = 0; i < NumModules; i++)
-      Printf("[%p, %p), ", Modules[i].Start, Modules[i].Stop);
+      Printf("%zd [%p, %p), ", Modules[i].Stop - Modules[i].Start,
+             Modules[i].Start, Modules[i].Stop);
     Printf("\n");
   }
   if (NumModulesWithInline8bitCounters) {
-    Printf("INFO: Loaded %zd modules with %zd inline 8-bit counters: ",
+    Printf("INFO: Loaded %zd modules   (%zd inline 8-bit counters): ",
            NumModulesWithInline8bitCounters, NumInline8bitCounters);
     for (size_t i = 0; i < NumModulesWithInline8bitCounters; i++)
-      Printf("[%p, %p), ", ModuleCounters[i].Start, ModuleCounters[i].Stop);
+      Printf("%zd [%p, %p), ", ModuleCounters[i].Stop - ModuleCounters[i].Start,
+             ModuleCounters[i].Start, ModuleCounters[i].Stop);
     Printf("\n");
   }
   if (NumPCTables) {
-    Printf("INFO: Loaded %zd PC tables,   %zd PCs: ", NumPCTables,
+    Printf("INFO: Loaded %zd PC tables (%zd PCs): ", NumPCTables,
            NumPCsInPCTables);
     for (size_t i = 0; i < NumPCTables; i++) {
-      Printf("[%p,%p), ", ModulePCTable[i].Start, ModulePCTable[i].Stop,
-             ModulePCTable[i].Stop - ModulePCTable[i].Start);
+      Printf("%zd [%p,%p), ", ModulePCTable[i].Stop - ModulePCTable[i].Start,
+             ModulePCTable[i].Start, ModulePCTable[i].Stop);
     }
     Printf("\n");
+
+    if ((NumGuards && NumGuards != NumPCsInPCTables) ||
+        (NumInline8bitCounters && NumInline8bitCounters != NumPCsInPCTables)) {
+      Printf("ERROR: The size of coverage PC tables does not match the"
+             " number of instrumented PCs. This might be a bug in the compiler,"
+             " please contact the libFuzzer developers.\n");
+      _Exit(1);
+    }
   }
 }
 
index 1ad5cf1d1cc88cd6a46d319d0b7bc05d97d60de1..36207f8ea3d2cd7f48e5606b17368820cf8987f0 100644 (file)
@@ -86,7 +86,8 @@ class TracePC {
 
   void ResetMaps() {
     ValueProfileMap.Reset();
-    memset(Counters(), 0, GetNumPCs());
+    if (NumModules)
+      memset(Counters(), 0, GetNumPCs());
     ClearExtraCounters();
     ClearInlineCounters();
   }
index b46960822bc513e26153d75b1d2dc4112e91c173..1de3dff04d6a81d48b91a79dfbc433a993a91550 100644 (file)
@@ -15,7 +15,7 @@ foreach (VARNAME ${variables_to_filter})
 endforeach()
 
 # Enable the coverage instrumentation (it is disabled for the Fuzzer lib).
-set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=trace-pc-guard,indirect-calls,trace-cmp,trace-div,trace-gep -gline-tables-only")
+set(CMAKE_CXX_FLAGS "${LIBFUZZER_FLAGS_BASE} -fsanitize-coverage=trace-pc-guard,indirect-calls,trace-cmp,trace-div,trace-gep,pc-table -gline-tables-only")
 
 if(MSVC)
   # For tests use the CRT specified for release build
index ff84dd119c123be171ca1f74792cd38b8a74f8f3..4727ba45946fe63b561dce7007bf7ebda8b8799a 100644 (file)
@@ -1,4 +1,4 @@
 REQUIRES: linux
-CHECK: INFO: Loaded 1 modules with {{.*}} inline 8-bit counters
+CHECK: INFO: Loaded 1 modules ({{.*}} inline 8-bit counters)
 CHECK: BINGO
 RUN: not LLVMFuzzer-SimpleTest-Inline8bitCounters -runs=1000000 -seed=1 2>&1 | FileCheck %s