diff options
author | Kostya Serebryany <kcc@google.com> | 2015-05-18 21:34:20 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-05-18 21:34:20 +0000 |
commit | 2da7b8485248c27083318302c30462ddbb5396ca (patch) | |
tree | 87e971d0edcf9040bf20121d2bf40fde54d81d11 /llvm/lib/Fuzzer/FuzzerLoop.cpp | |
parent | 1638f987f11fa1f8b4292b476b0ee3b92ca9b84c (diff) | |
download | bcm5719-llvm-2da7b8485248c27083318302c30462ddbb5396ca.tar.gz bcm5719-llvm-2da7b8485248c27083318302c30462ddbb5396ca.zip |
[lib/Fuzzer] when -sync_command=<CMD> is given, periodically execute 'CMD CORPUS' to synchronize with other processes
llvm-svn: 237617
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerLoop.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerLoop.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp index 9200f6293fd..3a80d0d7e23 100644 --- a/llvm/lib/Fuzzer/FuzzerLoop.cpp +++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp @@ -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 |