summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer/FuzzerLoop.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2015-05-18 21:34:20 +0000
committerKostya Serebryany <kcc@google.com>2015-05-18 21:34:20 +0000
commit2da7b8485248c27083318302c30462ddbb5396ca (patch)
tree87e971d0edcf9040bf20121d2bf40fde54d81d11 /llvm/lib/Fuzzer/FuzzerLoop.cpp
parent1638f987f11fa1f8b4292b476b0ee3b92ca9b84c (diff)
downloadbcm5719-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.cpp11
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
OpenPOWER on IntegriCloud