summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer/FuzzerTracePC.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2016-09-18 21:47:08 +0000
committerKostya Serebryany <kcc@google.com>2016-09-18 21:47:08 +0000
commitb706b481ba7125f1e0549e1cefcc9d375466c704 (patch)
tree639b6ba5d843e86252fb85238a83cf40c7038c41 /llvm/lib/Fuzzer/FuzzerTracePC.cpp
parentf33a6b713b7388da39dab1aa49e2a0aabf518b14 (diff)
downloadbcm5719-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.cpp11
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" {
OpenPOWER on IntegriCloud