aboutsummaryrefslogtreecommitdiffstats
path: root/executor/executor_bsd.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-04-27 14:31:49 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-04-27 14:33:01 +0200
commitbcd6198db5f0e61a6b5c824bbc58c954c4287d56 (patch)
treedb4844ba54971b780f95392dc641b4cc58a3c286 /executor/executor_bsd.cc
parent6bd89023819b08cd57c8ee342da966643c64ea77 (diff)
executor: support cover on 32-bit kernels
Detect kernel bitness and properly extract coverage on 32-bit kernels.
Diffstat (limited to 'executor/executor_bsd.cc')
-rw-r--r--executor/executor_bsd.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/executor/executor_bsd.cc b/executor/executor_bsd.cc
index 10b189008..83956f3a9 100644
--- a/executor/executor_bsd.cc
+++ b/executor/executor_bsd.cc
@@ -163,16 +163,17 @@ void cover_open()
fail("open of /dev/kcov failed");
if (ioctl(th->cover_fd, KIOSETBUFSIZE, &kCoverSize))
fail("ioctl init trace write failed");
- size_t mmap_alloc_size = kCoverSize * sizeof(th->cover_data[0]);
- uint64* mmap_ptr = (uint64*)mmap(NULL, mmap_alloc_size,
- PROT_READ | PROT_WRITE,
- MAP_SHARED, th->cover_fd, 0);
+ size_t mmap_alloc_size = kCoverSize * (is_kernel_64_bit ? 8 : 4);
+ char* mmap_ptr = (char*)mmap(NULL, mmap_alloc_size,
+ PROT_READ | PROT_WRITE,
+ MAP_SHARED, th->cover_fd, 0);
if (mmap_ptr == NULL)
fail("cover mmap failed");
- th->cover_size_ptr = mmap_ptr;
- th->cover_data = &mmap_ptr[1];
+ th->cover_data = mmap_ptr;
+ th->cover_end = mmap_ptr + mmap_alloc_size;
#else
- th->cover_data = &th->cover_buffer[0];
+ th->cover_data = (char*)&th->cover_buffer[0];
+ th->cover_end = th->cover_data + sizeof(th->cover_buffer);
#endif
}
}