diff options
author | Kostya Serebryany <kcc@google.com> | 2017-01-26 01:34:58 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2017-01-26 01:34:58 +0000 |
commit | 7856fb36b00017615144e68afe6a71574c460358 (patch) | |
tree | 001abc6bdef7e05856e4b9c4ae95776c638f5ffc /llvm/lib/Fuzzer | |
parent | 53f0cc238c5b8b049d9c41725907bfae105d9cc4 (diff) | |
download | bcm5719-llvm-7856fb36b00017615144e68afe6a71574c460358.tar.gz bcm5719-llvm-7856fb36b00017615144e68afe6a71574c460358.zip |
[libFuzzer] further simplify __sanitizer_cov_trace_pc_guard
llvm-svn: 293128
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerTracePC.h | 12 |
2 files changed, 7 insertions, 9 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerTracePC.cpp b/llvm/lib/Fuzzer/FuzzerTracePC.cpp index 8b3ea60e8e5..755f00a8f97 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.cpp +++ b/llvm/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/llvm/lib/Fuzzer/FuzzerTracePC.h b/llvm/lib/Fuzzer/FuzzerTracePC.h index d26e459b303..70f6b44e4f2 100644 --- a/llvm/lib/Fuzzer/FuzzerTracePC.h +++ b/llvm/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<uintptr_t> *PrintedPCs; @@ -122,7 +120,7 @@ size_t TracePC::CollectFeatures(Callback CB) { size_t Res = 0; const size_t Step = 8; assert(reinterpret_cast<uintptr_t>(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<uint64_t*>(&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; |