aboutsummaryrefslogtreecommitdiffstats
path: root/executor
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2024-05-28 11:01:35 +0200
committerDmitry Vyukov <dvyukov@google.com>2024-05-28 10:35:26 +0000
commit34889ee3b09e7b4d381828377aa6173bfcc36cc7 (patch)
tree85861179046c9d3126ef0403dd4cb2a44a00d03c /executor
parentf550015e921148a45f14a8ea6ac8fe1ade4907af (diff)
executor: fix coverfilter header size
Manager was switched to 64-bit PCs, but executor still expected 4-byte PC start in the header. Fix it and switch size to uint64 for simplicity as well.
Diffstat (limited to 'executor')
-rw-r--r--executor/cov_filter.h17
-rw-r--r--executor/test.h19
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;