[libFuzzer] when doing the merge, keep track of the coveraged edges, not just features
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/fuzzer@354087 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/FuzzerFork.cpp b/FuzzerFork.cpp
index 7c82f3f..41fb5c1 100644
--- a/FuzzerFork.cpp
+++ b/FuzzerFork.cpp
@@ -72,7 +72,7 @@
Vector<std::string> CorpusDirs;
std::string MainCorpusDir;
std::string TempDir;
- Set<uint32_t> Features;
+ Set<uint32_t> Features, Cov;
Vector<std::string> Files;
Random *Rand;
int Verbosity = 0;
@@ -122,9 +122,9 @@
GetSizedFilesFromDir(Job->CorpusDir, &TempFiles);
Vector<std::string> FilesToAdd;
- Set<uint32_t> NewFeatures;
+ Set<uint32_t> NewFeatures, NewCov;
CrashResistantMerge(Args, {}, TempFiles, &FilesToAdd, Features,
- &NewFeatures, Job->CFPath, false);
+ &NewFeatures, Cov, &NewCov, Job->CFPath, false);
RemoveFile(Job->CFPath);
for (auto &Path : FilesToAdd) {
auto U = FileToVector(Path);
@@ -134,11 +134,12 @@
}
RmDirRecursive(Job->CorpusDir);
Features.insert(NewFeatures.begin(), NewFeatures.end());
+ Cov.insert(NewCov.begin(), NewCov.end());
auto Stats = ParseFinalStatsFromLog(Job->LogPath);
NumRuns += Stats.number_of_executed_units;
if (!FilesToAdd.empty())
- Printf("#%zd: ft: %zd corp: %zd exec/s %zd\n", NumRuns,
- Features.size(), Files.size(),
+ Printf("#%zd: cov: %zd ft: %zd corp: %zd exec/s %zd\n", NumRuns,
+ Cov.size(), Features.size(), Files.size(),
Stats.average_exec_per_sec);
}
};
@@ -202,6 +203,7 @@
auto CFPath = DirPlusFile(Env.TempDir, "merge.txt");
CrashResistantMerge(Env.Args, {}, SeedFiles, &Env.Files, {}, &Env.Features,
+ {}, &Env.Cov,
CFPath, false);
RemoveFile(CFPath);
Printf("INFO: -fork=%d: %zd seeds, starting to fuzz; scratch: %s\n",