]> granicus.if.org Git - llvm/commitdiff
[libFuzzer] further simplify __sanitizer_cov_trace_pc_guard
authorKostya Serebryany <kcc@google.com>
Thu, 26 Jan 2017 01:34:58 +0000 (01:34 +0000)
committerKostya Serebryany <kcc@google.com>
Thu, 26 Jan 2017 01:34:58 +0000 (01:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293128 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/FuzzerTracePC.cpp
lib/Fuzzer/FuzzerTracePC.h

index 8b3ea60e8e5835fa30f6de9f3d1e268109898af4..755f00a8f97fe09a12e7c3e34fb4a4daeb3225a0 100644 (file)
@@ -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;
index d26e459b3034442d8e3a6cf394197efd7697c439..70f6b44e4f2815f8a53eff79f195ecb2a1255795 100644 (file)
@@ -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;