No public description
PiperOrigin-RevId: 594289544
diff --git a/centipede/analyze_corpora.cc b/centipede/analyze_corpora.cc
index 6e3060e..da42f01 100644
--- a/centipede/analyze_corpora.cc
+++ b/centipede/analyze_corpora.cc
@@ -137,6 +137,31 @@
} // namespace
+CoverageResults GetCoverage(std::string_view binary_name,
+ std::string_view binary_hash,
+ std::string_view workdir) {
+ const std::vector<CorpusRecord> corpus_records =
+ ReadCorpora(binary_name, binary_hash, workdir);
+
+ absl::flat_hash_set<size_t> pcs;
+ for (const auto &record : corpus_records) {
+ for (const auto &feature : record.features) {
+ if (!feature_domains::kPCs.Contains(feature)) continue;
+ auto pc = ConvertPCFeatureToPcIndex(feature);
+ pcs.insert(pc);
+ }
+ }
+
+ BinaryInfo binary_info = ReadBinaryInfo(binary_name, binary_hash, workdir);
+ CoverageResults ret = {
+ .pcs = {pcs.begin(), pcs.end()},
+ .binary_info = std::move(binary_info),
+ };
+ // Sort PCs to put them in the canonical order, as in pc_table.
+ std::sort(ret.pcs.begin(), ret.pcs.end());
+ return ret;
+}
+
AnalyzeCorporaResults AnalyzeCorpora(std::string_view binary_name,
std::string_view binary_hash,
std::string_view workdir_a,
diff --git a/centipede/analyze_corpora.h b/centipede/analyze_corpora.h
index 90eb528..3165f3b 100644
--- a/centipede/analyze_corpora.h
+++ b/centipede/analyze_corpora.h
@@ -32,6 +32,17 @@
BinaryInfo binary_info;
};
+// The result of analyzing a single corpus.
+struct CoverageResults {
+ std::vector<size_t> pcs;
+ BinaryInfo binary_info;
+};
+
+// Returns information on the corpus within `workdir`.
+CoverageResults GetCoverage(std::string_view binary_name,
+ std::string_view binary_hash,
+ std::string_view workdir);
+
// Compares the corpus within `workdir_a` with the corpus in `workdir_b`.
AnalyzeCorporaResults AnalyzeCorpora(std::string_view binary_name,
std::string_view binary_hash,