[llvm] r283676 - [libFuzzer] control the reload interval by a flag, make it 10 seconds by default
Kostya Serebryany via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 8 15:12:15 PDT 2016
Author: kcc
Date: Sat Oct 8 17:12:14 2016
New Revision: 283676
URL: http://llvm.org/viewvc/llvm-project?rev=283676&view=rev
Log:
[libFuzzer] control the reload interval by a flag, make it 10 seconds by default
Modified:
llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp
llvm/trunk/lib/Fuzzer/FuzzerFlags.def
llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
llvm/trunk/lib/Fuzzer/FuzzerOptions.h
Modified: llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp?rev=283676&r1=283675&r2=283676&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp Sat Oct 8 17:12:14 2016
@@ -401,7 +401,7 @@ int FuzzerDriver(int *argc, char ***argv
Options.Shrink = Flags.shrink;
Options.ShuffleAtStartUp = Flags.shuffle;
Options.PreferSmall = Flags.prefer_small;
- Options.Reload = Flags.reload;
+ Options.ReloadIntervalSec = Flags.reload;
Options.OnlyASCII = Flags.only_ascii;
Options.OutputCSV = Flags.output_csv;
Options.DetectLeaks = Flags.detect_leaks;
Modified: llvm/trunk/lib/Fuzzer/FuzzerFlags.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerFlags.def?rev=283676&r1=283675&r2=283676&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerFlags.def (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerFlags.def Sat Oct 8 17:12:14 2016
@@ -56,9 +56,9 @@ FUZZER_FLAG_INT(jobs, 0, "Number of jobs
FUZZER_FLAG_INT(workers, 0,
"Number of simultaneous worker processes to run the jobs."
" If zero, \"min(jobs,NumberOfCpuCores()/2)\" is used.")
-FUZZER_FLAG_INT(reload, 1,
- "Reload the main corpus periodically to get new units"
- " discovered by other processes.")
+FUZZER_FLAG_INT(reload, 10,
+ "Reload the main corpus every <N> seconds to get new units"
+ " discovered by other processes. If 0, disabled")
FUZZER_FLAG_INT(report_slow_units, 10,
"Report slowest units if they run for more than this number of seconds.")
FUZZER_FLAG_INT(only_ascii, 0,
Modified: llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp?rev=283676&r1=283675&r2=283676&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp Sat Oct 8 17:12:14 2016
@@ -149,7 +149,7 @@ Fuzzer::Fuzzer(UserCallback CB, InputCor
if (Options.Verbosity)
TPC.PrintModuleInfo();
- if (!Options.OutputCorpus.empty() && Options.Reload)
+ if (!Options.OutputCorpus.empty() && Options.ReloadIntervalSec)
EpochOfLastReadOfOutputCorpus = GetEpoch(Options.OutputCorpus);
MaxInputLen = MaxMutationLen = Options.MaxLen;
AllocateCurrentUnitData();
@@ -383,22 +383,25 @@ void Fuzzer::CheckExitOnSrcPos() {
}
void Fuzzer::RereadOutputCorpus(size_t MaxSize) {
- if (Options.OutputCorpus.empty() || !Options.Reload) return;
+ if (Options.OutputCorpus.empty() || !Options.ReloadIntervalSec) return;
std::vector<Unit> AdditionalCorpus;
ReadDirToVectorOfUnits(Options.OutputCorpus.c_str(), &AdditionalCorpus,
&EpochOfLastReadOfOutputCorpus, MaxSize);
if (Options.Verbosity >= 2)
Printf("Reload: read %zd new units.\n", AdditionalCorpus.size());
+ bool Reloaded = false;
for (auto &U : AdditionalCorpus) {
if (U.size() > MaxSize)
U.resize(MaxSize);
if (!Corpus.HasUnit(U)) {
if (size_t NumFeatures = RunOne(U)) {
Corpus.AddToCorpus(U, NumFeatures);
- PrintStats("RELOAD");
+ Reloaded = true;
}
}
}
+ if (Reloaded)
+ PrintStats("RELOAD");
}
void Fuzzer::ShuffleCorpus(UnitVector *V) {
@@ -705,7 +708,8 @@ void Fuzzer::Loop() {
MD.SetCorpus(&Corpus);
while (true) {
auto Now = system_clock::now();
- if (duration_cast<seconds>(Now - LastCorpusReload).count()) {
+ if (duration_cast<seconds>(Now - LastCorpusReload).count() >=
+ Options.ReloadIntervalSec) {
RereadOutputCorpus(MaxInputLen);
LastCorpusReload = Now;
}
Modified: llvm/trunk/lib/Fuzzer/FuzzerOptions.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerOptions.h?rev=283676&r1=283675&r2=283676&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerOptions.h (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerOptions.h Sat Oct 8 17:12:14 2016
@@ -32,7 +32,7 @@ struct FuzzingOptions {
bool UseMemmem = true;
bool UseValueProfile = false;
bool Shrink = false;
- bool Reload = true;
+ int ReloadIntervalSec = 1;
bool ShuffleAtStartUp = true;
bool PreferSmall = true;
size_t MaxNumberOfRuns = -1L;
More information about the llvm-commits
mailing list