aboutsummaryrefslogtreecommitdiffstats
path: root/executor/test.h
diff options
context:
space:
mode:
authorKaipeng Zeng <kaipeng94@gmail.com>2020-08-06 01:32:00 -0400
committerDmitry Vyukov <dvyukov@google.com>2020-12-06 11:57:18 +0100
commitc521566d3f377ad8c69075d3de190738fd12368c (patch)
tree6254ab407c8225d2145723420811239b5ff20a8a /executor/test.h
parent6d371461fd1b83fcfcb86578f504c52134e2df25 (diff)
syz-manager/manager.go, executor/executor.cc: support coverage filter
Diffstat (limited to 'executor/test.h')
-rw-r--r--executor/test.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/executor/test.h b/executor/test.h
index 37d03b65a..c8492ed73 100644
--- a/executor/test.h
+++ b/executor/test.h
@@ -201,6 +201,39 @@ static int test_csum_inet_acc()
return 0;
}
+static int test_coverage_filter()
+{
+ struct tmp_cov_filter_t {
+ uint32 pcstart;
+ uint32 pcsize;
+ uint8 bitmap[((0x1000 >> 4) + 7) / 8];
+ };
+ static struct tmp_cov_filter_t tmp_cov_filter;
+ tmp_cov_filter.pcstart = 0x81000000;
+ tmp_cov_filter.pcsize = 0x1000;
+ memset(tmp_cov_filter.bitmap, 0, ((0x1000 >> 4) + 7) / 8);
+ cov_filter = (cov_filter_t*)&tmp_cov_filter;
+
+ uint64 full_enable_pc = 0xffffffff81000765;
+ uint64 full_disable_pc = 0xffffffff81000627;
+ uint64 full_out_pc = 0xffffffff82000000;
+
+ uint32 enable_pc = (uint32)full_enable_pc & 0xffffffff;
+ uint32 idx = ((enable_pc - cov_filter->pcstart) >> 4) / 8;
+ uint32 shift = ((enable_pc - cov_filter->pcstart) >> 4) % 8;
+ cov_filter->bitmap[idx] |= (1 << shift);
+
+ if (!coverage_filter(full_enable_pc))
+ return 1;
+ if (coverage_filter(full_disable_pc))
+ return 1;
+ if (coverage_filter(full_out_pc))
+ return 1;
+
+ cov_filter = NULL;
+ return 0;
+}
+
static struct {
const char* name;
int (*f)();
@@ -211,6 +244,7 @@ static struct {
#if GOOS_linux && (GOARCH_amd64 || GOARCH_ppc64 || GOARCH_ppc64le)
{"test_kvm", test_kvm},
#endif
+ {"test_coverage_filter", test_coverage_filter},
};
static int run_tests()