[lib/Fuzzer] when -sync_command=<CMD> is given, periodically execute 'CMD CORPUS' to synchronize with other processes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237617 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kostya Serebryany
2015-05-18 21:34:20 +00:00
parent 825a528bbe
commit 05ef67b6b9
6 changed files with 29 additions and 1 deletions

View File

@@ -324,6 +324,7 @@ void Fuzzer::MutateAndTestOne(Unit *U) {
void Fuzzer::Loop(size_t NumIterations) {
for (size_t i = 1; i <= NumIterations; i++) {
for (size_t J1 = 0; J1 < Corpus.size(); J1++) {
SyncCorpus();
RereadOutputCorpus();
if (TotalNumberOfRuns >= Options.MaxNumberOfRuns)
return;
@@ -342,4 +343,14 @@ void Fuzzer::Loop(size_t NumIterations) {
}
}
void Fuzzer::SyncCorpus() {
if (Options.SyncCommand.empty() || Options.OutputCorpus.empty()) return;
auto Now = system_clock::now();
if (duration_cast<seconds>(Now - LastExternalSync).count() <
Options.SyncTimeout)
return;
LastExternalSync = Now;
ExecuteCommand(Options.SyncCommand + " " + Options.OutputCorpus);
}
} // namespace fuzzer