summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.cpp26
-rw-r--r--llvm/lib/Fuzzer/FuzzerTracePC.h3
-rw-r--r--llvm/lib/Fuzzer/test/CMakeLists.txt2
-rw-r--r--llvm/lib/Fuzzer/test/inline-8bit-counters.test2
4 files changed, 22 insertions, 11 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
index 1c4c24032fc..1cfd3f3ecff 100644
--- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp
+++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp
@@ -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);
+ }
}
}
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.h b/llvm/lib/Fuzzer/FuzzerTracePC.h
index 1ad5cf1d1cc..36207f8ea3d 100644
--- a/llvm/lib/Fuzzer/FuzzerTracePC.h
+++ b/llvm/lib/Fuzzer/FuzzerTracePC.h
@@ -86,7 +86,8 @@ class TracePC {
void ResetMaps() {
ValueProfileMap.Reset();
- memset(Counters(), 0, GetNumPCs());
+ if (NumModules)
+ memset(Counters(), 0, GetNumPCs());
ClearExtraCounters();
ClearInlineCounters();
}
diff --git a/llvm/lib/Fuzzer/test/CMakeLists.txt b/llvm/lib/Fuzzer/test/CMakeLists.txt
index b46960822bc..1de3dff04d6 100644
--- a/llvm/lib/Fuzzer/test/CMakeLists.txt
+++ b/llvm/lib/Fuzzer/test/CMakeLists.txt
@@ -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
diff --git a/llvm/lib/Fuzzer/test/inline-8bit-counters.test b/llvm/lib/Fuzzer/test/inline-8bit-counters.test
index ff84dd119c1..4727ba45946 100644
--- a/llvm/lib/Fuzzer/test/inline-8bit-counters.test
+++ b/llvm/lib/Fuzzer/test/inline-8bit-counters.test
@@ -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
OpenPOWER on IntegriCloud