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(); }
bool Fuzzer::CheckCoverageAfterRun() { size_t OldCoverage = LastRecordedBlockCoverage; size_t NewCoverage = RecordBlockCoverage(); size_t OldCallerCalleeCoverage = LastRecordedCallerCalleeCoverage; size_t NewCallerCalleeCoverage = RecordCallerCalleeCoverage(); size_t NumNewBits = 0; if (Options.UseCounters) NumNewBits = __sanitizer_update_counter_bitset_and_clear_counters( CounterBitmap.data()); return NewCoverage > OldCoverage || NewCallerCalleeCoverage > OldCallerCalleeCoverage || NumNewBits; }
bool Fuzzer::CheckCoverageAfterRun() { size_t OldCoverage = LastRecordedBlockCoverage; size_t NewCoverage = RecordBlockCoverage(); size_t OldCallerCalleeCoverage = LastRecordedCallerCalleeCoverage; size_t NewCallerCalleeCoverage = RecordCallerCalleeCoverage(); size_t NumNewBits = 0; size_t OldPcMapSize = LastRecordedPcMapSize; PcMapMergeCurrentToCombined(); size_t NewPcMapSize = PcMapCombinedSize(); LastRecordedPcMapSize = NewPcMapSize; if (NewPcMapSize > OldPcMapSize) return true; if (Options.UseCounters) NumNewBits = __sanitizer_update_counter_bitset_and_clear_counters( CounterBitmap.data()); return NewCoverage > OldCoverage || NewCallerCalleeCoverage > OldCallerCalleeCoverage || NumNewBits; }