diff options
| author | Kostya Serebryany <kcc@google.com> | 2016-09-18 21:47:08 +0000 |
|---|---|---|
| committer | Kostya Serebryany <kcc@google.com> | 2016-09-18 21:47:08 +0000 |
| commit | b706b481ba7125f1e0549e1cefcc9d375466c704 (patch) | |
| tree | 639b6ba5d843e86252fb85238a83cf40c7038c41 /llvm/lib/Fuzzer/FuzzerTracePC.cpp | |
| parent | f33a6b713b7388da39dab1aa49e2a0aabf518b14 (diff) | |
| download | bcm5719-llvm-b706b481ba7125f1e0549e1cefcc9d375466c704.tar.gz bcm5719-llvm-b706b481ba7125f1e0549e1cefcc9d375466c704.zip | |
[libFuzzer] add -print_coverage=1 flag to print coverage directly from libFuzzer
llvm-svn: 281866
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" { |

