static void Prepare(const Fuzzer::FuzzingOptions &Options, Fuzzer::Coverage *C) { if (Options.UseCounters) { size_t NumCounters = __sanitizer_get_number_of_counters(); C->CounterBitmap.resize(NumCounters); } }
void Fuzzer::PrepareCoverageBeforeRun() { if (Options.UseCounters) { size_t NumCounters = __sanitizer_get_number_of_counters(); CounterBitmap.resize(NumCounters); __sanitizer_update_counter_bitset_and_clear_counters(0); } RecordBlockCoverage(); RecordCallerCalleeCoverage(); }
size_t Fuzzer::RunOneMaximizeTotalCoverage(const Unit &U) { size_t NumCounters = __sanitizer_get_number_of_counters(); if (Options.UseCounters) { CounterBitmap.resize(NumCounters); __sanitizer_update_counter_bitset_and_clear_counters(0); } size_t OldCoverage = __sanitizer_get_total_unique_coverage(); ExecuteCallback(U); size_t NewCoverage = __sanitizer_get_total_unique_coverage(); size_t NumNewBits = 0; if (Options.UseCounters) NumNewBits = __sanitizer_update_counter_bitset_and_clear_counters( CounterBitmap.data()); if (!(TotalNumberOfRuns & (TotalNumberOfRuns - 1)) && Options.Verbosity) PrintStats("pulse ", NewCoverage); if (NewCoverage > OldCoverage || NumNewBits) return NewCoverage; return 0; }