diff options
Diffstat (limited to 'executor')
| -rw-r--r-- | executor/cov_filter.h | 17 | ||||
| -rw-r--r-- | executor/test.h | 19 |
2 files changed, 17 insertions, 19 deletions
diff --git a/executor/cov_filter.h b/executor/cov_filter.h index 61f8f9e3f..192ecbc2d 100644 --- a/executor/cov_filter.h +++ b/executor/cov_filter.h @@ -7,8 +7,8 @@ #include <sys/stat.h> struct cov_filter_t { - uint32 pcstart; - uint32 pcsize; + uint64 pcstart; + uint64 pcsize; uint8 bitmap[]; }; @@ -31,7 +31,7 @@ static void init_coverage_filter(char* filename) cov_filter = (cov_filter_t*)mmap(preferred, st.st_size, PROT_READ, MAP_PRIVATE, f, 0); if (cov_filter != preferred) failmsg("failed to mmap coverage filter bitmap", "want=%p, got=%p", preferred, cov_filter); - if ((uint32)st.st_size != sizeof(uint32) * 2 + ((cov_filter->pcsize >> 4) / 8 + 2)) + if ((uint32)st.st_size != sizeof(uint64) * 2 + ((cov_filter->pcsize >> 4) / 8 + 2)) fail("bad coverage filter bitmap size"); close(f); } @@ -43,14 +43,13 @@ static bool coverage_filter(uint64 pc) if (cov_filter == NULL) fail("coverage filter was enabled but bitmap initialization failed"); // Prevent out of bound while searching bitmap. - uint32 pc32 = (uint32)(pc & 0xffffffff); - if (pc32 < cov_filter->pcstart || pc32 > cov_filter->pcstart + cov_filter->pcsize) + if (pc < cov_filter->pcstart || pc > cov_filter->pcstart + cov_filter->pcsize) return false; // For minimizing the size of bitmap, the lowest 4-bit will be dropped. - pc32 -= cov_filter->pcstart; - pc32 = pc32 >> 4; - uint32 idx = pc32 / 8; - uint32 shift = pc32 % 8; + pc -= cov_filter->pcstart; + pc = pc >> 4; + uint64 idx = pc / 8; + uint64 shift = pc % 8; return (cov_filter->bitmap[idx] & (1 << shift)) > 0; } diff --git a/executor/test.h b/executor/test.h index 9cbc88cc1..977cbd0ef 100644 --- a/executor/test.h +++ b/executor/test.h @@ -205,30 +205,29 @@ static int test_csum_inet_acc() static int test_coverage_filter() { struct tmp_cov_filter_t { - uint32 pcstart; - uint32 pcsize; + uint64 pcstart; + uint64 pcsize; uint8 bitmap[((0x1000 >> 4) + 7) / 8]; }; static struct tmp_cov_filter_t tmp_cov_filter; - tmp_cov_filter.pcstart = 0x81000000; + tmp_cov_filter.pcstart = 0xffffffff81000000; tmp_cov_filter.pcsize = 0x1000; cov_filter = (cov_filter_t*)&tmp_cov_filter; flag_coverage_filter = true; - uint64 full_enable_pc = 0xffffffff81000765; - uint64 full_disable_pc = 0xffffffff81000627; - uint64 full_out_pc = 0xffffffff82000000; + uint64 enable_pc = 0xffffffff81000765; + uint64 disable_pc = 0xffffffff81000627; + uint64 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)) + if (!coverage_filter(enable_pc)) return 1; - if (coverage_filter(full_disable_pc)) + if (coverage_filter(disable_pc)) return 1; - if (coverage_filter(full_out_pc)) + if (coverage_filter(out_pc)) return 1; cov_filter = NULL; |
