[llvm] r283841 - [libFuzzer] implement value profile for switch, increase the size of the PCs array, make sure we don't overflow it

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 10 18:14:41 PDT 2016


Author: kcc
Date: Mon Oct 10 20:14:41 2016
New Revision: 283841

URL: http://llvm.org/viewvc/llvm-project?rev=283841&view=rev
Log:
[libFuzzer] implement value profile for switch, increase the size of the PCs array, make sure we don't overflow it

Modified:
    llvm/trunk/lib/Fuzzer/FuzzerTracePC.cpp
    llvm/trunk/lib/Fuzzer/FuzzerTracePC.h
    llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt

Modified: llvm/trunk/lib/Fuzzer/FuzzerTracePC.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerTracePC.cpp?rev=283841&r1=283840&r2=283841&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerTracePC.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerTracePC.cpp Mon Oct 10 20:14:41 2016
@@ -27,10 +27,10 @@ void TracePC::HandleTrace(uint32_t *Guar
   uint8_t *CounterPtr = &Counters[Idx % kNumCounters];
   uint8_t Counter = *CounterPtr;
   if (Counter == 0) {
-    if (!PCs[Idx]) {
+    if (!PCs[Idx % kNumPCs]) {
       AddNewPCID(Idx);
       TotalPCCoverage++;
-      PCs[Idx] = PC;
+      PCs[Idx % kNumPCs] = PC;
     }
   }
   if (UseCounters) {
@@ -227,7 +227,12 @@ void __sanitizer_cov_trace_cmp1(uint8_t
 
 __attribute__((visibility("default")))
 void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases) {
-  // TODO(kcc): support value profile here.
+  uint64_t N = Cases[0];
+  uint64_t *Vals = Cases + 2;
+  char *PC = (char*)__builtin_return_address(0);
+  for (size_t i = 0; i < N; i++)
+    if (Val != Vals[i])
+      fuzzer::AddValueForCmp(PC + i, Val, Vals[i]);
 }
 
 __attribute__((visibility("default")))

Modified: llvm/trunk/lib/Fuzzer/FuzzerTracePC.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerTracePC.h?rev=283841&r1=283840&r2=283841&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerTracePC.h (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerTracePC.h Mon Oct 10 20:14:41 2016
@@ -87,7 +87,7 @@ private:
   static const size_t kNumCounters = 1 << 14;
   alignas(8) uint8_t Counters[kNumCounters];
 
-  static const size_t kNumPCs = 1 << 20;
+  static const size_t kNumPCs = 1 << 24;
   uintptr_t PCs[kNumPCs];
 
   ValueBitMap ValueProfileMap;

Modified: llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt?rev=283841&r1=283840&r2=283841&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt (original)
+++ llvm/trunk/lib/Fuzzer/test/trace-pc/CMakeLists.txt Mon Oct 10 20:14:41 2016
@@ -10,6 +10,8 @@ set(TracePCTests
   NullDerefTest
   ShrinkControlFlowTest
   ShrinkValueProfileTest
+  SwitchTest
+  Switch2Test
   FullCoverageSetTest
   )
 




More information about the llvm-commits mailing list