forked from OSchip/llvm-project
Revert r337194 (https://reviews.llvm.org/D48891) due to compilation errors.
llvm-svn: 337206
This commit is contained in:
parent
241d4ad761
commit
5697c59c7f
|
@ -615,7 +615,6 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
|
|||
Options.PrintNewCovPcs = Flags.print_pcs;
|
||||
Options.PrintNewCovFuncs = Flags.print_funcs;
|
||||
Options.PrintFinalStats = Flags.print_final_stats;
|
||||
Options.PrintMutationStats = Flags.print_mutation_stats;
|
||||
Options.PrintCorpusStats = Flags.print_corpus_stats;
|
||||
Options.PrintCoverage = Flags.print_coverage;
|
||||
Options.PrintUnstableStats = Flags.print_unstable_stats;
|
||||
|
|
|
@ -155,4 +155,3 @@ FUZZER_DEPRECATED_FLAG(use_equivalence_server)
|
|||
FUZZER_FLAG_INT(analyze_dict, 0, "Experimental")
|
||||
FUZZER_DEPRECATED_FLAG(use_clang_coverage)
|
||||
FUZZER_FLAG_STRING(data_flow_trace, "Experimental: use the data flow trace")
|
||||
FUZZER_FLAG_INT(print_mutation_stats, 0, "Experimental")
|
||||
|
|
|
@ -358,8 +358,6 @@ void Fuzzer::PrintFinalStats() {
|
|||
TPC.DumpCoverage();
|
||||
if (Options.PrintCorpusStats)
|
||||
Corpus.PrintStats();
|
||||
if (Options.PrintMutationStats)
|
||||
MD.PrintMutationStats();
|
||||
if (!Options.PrintFinalStats)
|
||||
return;
|
||||
size_t ExecPerSec = execPerSec();
|
||||
|
|
|
@ -465,7 +465,6 @@ void MutationDispatcher::RecordSuccessfulMutationSequence() {
|
|||
if (!PersistentAutoDictionary.ContainsWord(DE->GetW()))
|
||||
PersistentAutoDictionary.push_back({DE->GetW(), 1});
|
||||
}
|
||||
RecordUsefulMutations();
|
||||
}
|
||||
|
||||
void MutationDispatcher::PrintRecommendedDictionary() {
|
||||
|
@ -487,7 +486,7 @@ void MutationDispatcher::PrintRecommendedDictionary() {
|
|||
void MutationDispatcher::PrintMutationSequence() {
|
||||
Printf("MS: %zd ", CurrentMutatorSequence.size());
|
||||
for (auto M : CurrentMutatorSequence)
|
||||
Printf("%s-", M->Name);
|
||||
Printf("%s-", M.Name);
|
||||
if (!CurrentDictionaryEntrySequence.empty()) {
|
||||
Printf(" DE: ");
|
||||
for (auto DE : CurrentDictionaryEntrySequence) {
|
||||
|
@ -515,13 +514,12 @@ size_t MutationDispatcher::MutateImpl(uint8_t *Data, size_t Size,
|
|||
// in which case they will return 0.
|
||||
// Try several times before returning un-mutated data.
|
||||
for (int Iter = 0; Iter < 100; Iter++) {
|
||||
auto M = &Mutators[Rand(Mutators.size())];
|
||||
size_t NewSize = (this->*(M->Fn))(Data, Size, MaxSize);
|
||||
auto M = Mutators[Rand(Mutators.size())];
|
||||
size_t NewSize = (this->*(M.Fn))(Data, Size, MaxSize);
|
||||
if (NewSize && NewSize <= MaxSize) {
|
||||
if (Options.OnlyASCII)
|
||||
ToASCII(Data, NewSize);
|
||||
CurrentMutatorSequence.push_back(M);
|
||||
M->TotalCount++;
|
||||
return NewSize;
|
||||
}
|
||||
}
|
||||
|
@ -534,23 +532,4 @@ void MutationDispatcher::AddWordToManualDictionary(const Word &W) {
|
|||
{W, std::numeric_limits<size_t>::max()});
|
||||
}
|
||||
|
||||
void MutationDispatcher::RecordUsefulMutations() {
|
||||
for (auto M : CurrentMutatorSequence)
|
||||
M->UsefulCount++;
|
||||
}
|
||||
|
||||
void MutationDispatcher::PrintMutationStats() {
|
||||
Printf("\nstat::mutation_usefulness: ");
|
||||
for (size_t i = 0; i < Mutators.size(); i++) {
|
||||
double UsefulPercentage =
|
||||
Mutators[i].TotalCount
|
||||
? (100.0 * Mutators[i].UsefulCount) / Mutators[i].TotalCount
|
||||
: 0;
|
||||
Printf("%.3f", UsefulPercentage);
|
||||
if (i < Mutators.size() - 1)
|
||||
Printf(",");
|
||||
}
|
||||
Printf("\n");
|
||||
}
|
||||
|
||||
} // namespace fuzzer
|
||||
|
|
|
@ -86,16 +86,11 @@ public:
|
|||
|
||||
Random &GetRand() { return Rand; }
|
||||
|
||||
void PrintMutationStats();
|
||||
|
||||
void RecordUsefulMutations();
|
||||
|
||||
private:
|
||||
|
||||
struct Mutator {
|
||||
size_t (MutationDispatcher::*Fn)(uint8_t *Data, size_t Size, size_t Max);
|
||||
const char *Name;
|
||||
uint64_t UsefulCount;
|
||||
uint64_t TotalCount;
|
||||
};
|
||||
|
||||
size_t AddWordFromDictionary(Dictionary &D, uint8_t *Data, size_t Size,
|
||||
|
@ -133,8 +128,8 @@ private:
|
|||
// entries that led to successful discoveries in the past mutations.
|
||||
Dictionary PersistentAutoDictionary;
|
||||
|
||||
Vector<Mutator> CurrentMutatorSequence;
|
||||
Vector<DictionaryEntry *> CurrentDictionaryEntrySequence;
|
||||
Vector<Mutator *> CurrentMutatorSequence;
|
||||
|
||||
static const size_t kCmpDictionaryEntriesDequeSize = 16;
|
||||
DictionaryEntry CmpDictionaryEntriesDeque[kCmpDictionaryEntriesDequeSize];
|
||||
|
|
|
@ -52,7 +52,6 @@ struct FuzzingOptions {
|
|||
bool PrintNewCovPcs = false;
|
||||
int PrintNewCovFuncs = 0;
|
||||
bool PrintFinalStats = false;
|
||||
bool PrintMutationStats = false;
|
||||
bool PrintCorpusStats = false;
|
||||
bool PrintCoverage = false;
|
||||
bool PrintUnstableStats = false;
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-MutationStatsTest
|
||||
RUN: not %run %t-MutationStatsTest -print_mutation_stats=1 2>&1 | FileCheck %s
|
||||
|
||||
# Ensures there are some non-zero values in the usefulness percentages printed.
|
||||
CHECK: stat::mutation_usefulness: {{[0-9]+\.[0-9]+}}
|
Loading…
Reference in New Issue