diff options
author | Kostya Serebryany <kcc@google.com> | 2015-08-12 01:55:37 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-08-12 01:55:37 +0000 |
commit | 12c7837381a478ab7836f8176ccff37c8d182a1b (patch) | |
tree | b591a2cd64be30698cc328d89d62e74fe7d155f7 /llvm/lib/Fuzzer/FuzzerLoop.cpp | |
parent | 91009b3856cd242707e05f838eff29436979a73a (diff) | |
download | bcm5719-llvm-12c7837381a478ab7836f8176ccff37c8d182a1b.tar.gz bcm5719-llvm-12c7837381a478ab7836f8176ccff37c8d182a1b.zip |
[libFuzzer] add two flags, -tbm_depth and -tbm_width to control how the trace-based-mutations are applied
llvm-svn: 244712
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerLoop.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerLoop.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp index b9c27e3f4a3..87ba0c0bbcd 100644 --- a/llvm/lib/Fuzzer/FuzzerLoop.cpp +++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp @@ -81,9 +81,11 @@ void Fuzzer::PrintStats(const char *Where, size_t Cov, const char *End) { if (!Options.Verbosity) return; size_t Seconds = secondsSinceProcessStartUp(); size_t ExecPerSec = (Seconds ? TotalNumberOfRuns / Seconds : 0); - Printf("#%zd\t%s cov: %zd bits: %zd units: %zd exec/s: %zd %s", - TotalNumberOfRuns, Where, Cov, TotalBits(), Corpus.size(), ExecPerSec, - End); + Printf("#%zd\t%s cov: %zd bits: %zd units: %zd exec/s: %zd", + TotalNumberOfRuns, Where, Cov, TotalBits(), Corpus.size(), ExecPerSec); + if (TotalNumberOfExecutedTraceBasedMutations) + Printf(" tbm: %zd", TotalNumberOfExecutedTraceBasedMutations); + Printf("%s", End); } void Fuzzer::RereadOutputCorpus() { @@ -311,9 +313,18 @@ void Fuzzer::MutateAndTestOne(Unit *U) { U->resize(NewSize); RunOneAndUpdateCorpus(*U); size_t NumTraceBasedMutations = StopTraceRecording(); - for (size_t j = 0; j < NumTraceBasedMutations; j++) { - ApplyTraceBasedMutation(j, U); - RunOneAndUpdateCorpus(*U); + size_t TBMWidth = + std::min((size_t)Options.TBMWidth, NumTraceBasedMutations); + size_t TBMDepth = + std::min((size_t)Options.TBMDepth, NumTraceBasedMutations); + Unit BackUp = *U; + for (size_t w = 0; w < TBMWidth; w++) { + *U = BackUp; + for (size_t d = 0; d < TBMDepth; d++) { + TotalNumberOfExecutedTraceBasedMutations++; + ApplyTraceBasedMutation(USF.GetRand()(NumTraceBasedMutations), U); + RunOneAndUpdateCorpus(*U); + } } } } |