diff options
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerTracePC.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 26 |
1 files changed, 18 insertions, 8 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); + } } } |