diff options
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerTracePC.cpp')
| -rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp index 888e7b3d532..db62345e272 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp +++ b/llvm/lib/Fuzzer/FuzzerTracePC.cpp @@ -18,6 +18,7 @@ namespace fuzzer { TracePC TPC; const size_t TracePC::kNumCounters; +const size_t TracePC::kNumPCs; void TracePC::HandleTrace(uintptr_t *Guard, uintptr_t PC) { uintptr_t Idx = *Guard; @@ -25,6 +26,7 @@ void TracePC::HandleTrace(uintptr_t *Guard, uintptr_t PC) { if (UseCounters) { uint8_t Counter = Counters[Idx % kNumCounters]; if (Counter == 0) { + PCs[Idx] = PC; if (TotalCoverageMap.AddValue(Idx)) { TotalCoverage++; AddNewPC(PC); @@ -38,6 +40,7 @@ void TracePC::HandleTrace(uintptr_t *Guard, uintptr_t PC) { *Guard = 0; TotalCoverage++; AddNewPC(PC); + PCs[Idx] = PC; } } @@ -100,6 +103,14 @@ void TracePC::HandleCallerCallee(uintptr_t Caller, uintptr_t Callee) { CounterMap.AddValue((Caller & kMask) | ((Callee & kMask) << kBits)); } +void TracePC::PrintCoverage() { + Printf("COVERAGE:\n"); + for (size_t i = 0; i < std::min(NumGuards, kNumPCs); i++) { + if (PCs[i]) + PrintPC("COVERED: %p %F %L\n", "COVERED: %p\n", PCs[i]); + } +} + } // namespace fuzzer extern "C" { |

