From c43e0682f2afc957dfa3933c7597a48b6584040f Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Thu, 26 Jan 2017 01:34:58 +0000 Subject: [PATCH] [libFuzzer] further simplify __sanitizer_cov_trace_pc_guard git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293128 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Fuzzer/FuzzerTracePC.cpp | 4 ++-- lib/Fuzzer/FuzzerTracePC.h | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/Fuzzer/FuzzerTracePC.cpp b/lib/Fuzzer/FuzzerTracePC.cpp index 8b3ea60e8e5..755f00a8f97 100644 --- a/lib/Fuzzer/FuzzerTracePC.cpp +++ b/lib/Fuzzer/FuzzerTracePC.cpp @@ -32,12 +32,12 @@ ATTRIBUTE_NO_SANITIZE_ALL void TracePC::HandleTrace(uint32_t *Guard, uintptr_t PC) { uint32_t Idx = *Guard; PCs[Idx] = PC; - Counters[Idx % kNumCounters]++; + Counters[Idx]++; } size_t TracePC::GetTotalPCCoverage() { size_t Res = 0; - for (size_t i = 1; i < GetNumPCs(); i++) + for (size_t i = 1, N = GetNumPCs(); i < N; i++) if (PCs[i]) Res++; return Res; diff --git a/lib/Fuzzer/FuzzerTracePC.h b/lib/Fuzzer/FuzzerTracePC.h index d26e459b303..70f6b44e4f2 100644 --- a/lib/Fuzzer/FuzzerTracePC.h +++ b/lib/Fuzzer/FuzzerTracePC.h @@ -64,7 +64,7 @@ class TracePC { void ResetMaps() { ValueProfileMap.Reset(); - memset(Counters, 0, sizeof(Counters)); + memset(Counters, 0, GetNumPCs()); } void UpdateFeatureSet(size_t CurrentElementIdx, size_t CurrentElementSize); @@ -105,10 +105,8 @@ private: size_t NumModules; // linker-initialized. size_t NumGuards; // linker-initialized. - static const size_t kNumCounters = 1 << 14; - alignas(8) uint8_t Counters[kNumCounters]; - - static const size_t kNumPCs = 1 << 24; + static const size_t kNumPCs = 1 << 21; + alignas(8) uint8_t Counters[kNumPCs]; uintptr_t PCs[kNumPCs]; std::set *PrintedPCs; @@ -122,7 +120,7 @@ size_t TracePC::CollectFeatures(Callback CB) { size_t Res = 0; const size_t Step = 8; assert(reinterpret_cast(Counters) % Step == 0); - size_t N = Min(kNumCounters, NumGuards + 1); + size_t N = GetNumPCs(); N = (N + Step - 1) & ~(Step - 1); // Round up. for (size_t Idx = 0; Idx < N; Idx += Step) { uint64_t Bundle = *reinterpret_cast(&Counters[Idx]); @@ -146,7 +144,7 @@ size_t TracePC::CollectFeatures(Callback CB) { } if (UseValueProfile) ValueProfileMap.ForEach([&](size_t Idx) { - if (CB(NumGuards * 8 + Idx)) + if (CB(N * 8 + Idx)) Res++; }); return Res; -- 2.40.0