diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-04-27 14:31:49 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-04-27 14:33:01 +0200 |
| commit | bcd6198db5f0e61a6b5c824bbc58c954c4287d56 (patch) | |
| tree | db4844ba54971b780f95392dc641b4cc58a3c286 /executor/executor_bsd.cc | |
| parent | 6bd89023819b08cd57c8ee342da966643c64ea77 (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.cc | 15 |
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 } } |
