diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-06-21 11:03:53 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-06-22 16:40:45 +0200 |
| commit | c31f96a8c65c0757078ea77218905c73fc1068d4 (patch) | |
| tree | fc68a43058ed05e9604514c67240f6a4fa0b25ed /executor/executor_bsd.cc | |
| parent | 14e6c472f54ac36d5bdfe451371c619953eb0a17 (diff) | |
executor: rework fallback coverage
We have fallback coverage implmentation for freebsd.
1. It's broken after some recent changes.
2. We need it for fuchsia, windows, akaros, linux too.
3. It's painful to work with C code.
Move fallback coverage to ipc package,
fix it and provide for all OSes.
Diffstat (limited to 'executor/executor_bsd.cc')
| -rw-r--r-- | executor/executor_bsd.cc | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/executor/executor_bsd.cc b/executor/executor_bsd.cc index 4ae2cf223..d23f93fb8 100644 --- a/executor/executor_bsd.cc +++ b/executor/executor_bsd.cc @@ -89,13 +89,11 @@ int main(int argc, char** argv) setrlimit(RLIMIT_CORE, &rlim); install_segv_handler(); - setup_control_pipes(); - receive_handshake(); + main_init(); reply_handshake(); - cover_open(); for (;;) { - receive_execute(false); + receive_execute(); char cwdbuf[128] = "/syz-tmpXXXXXX"; if (!mkdtemp(cwdbuf)) fail("mkdtemp failed"); @@ -153,11 +151,9 @@ long execute_syscall(const call_t* c, long a0, long a1, long a2, long a3, long a void cover_open() { - if (!flag_cover) - return; +#if defined(__FreeBSD__) for (int i = 0; i < kMaxThreads; i++) { thread_t* th = &threads[i]; -#if defined(__FreeBSD__) th->cover_fd = open("/dev/kcov", O_RDWR); if (th->cover_fd == -1) fail("open of /dev/kcov failed"); @@ -171,18 +167,13 @@ void cover_open() fail("cover mmap failed"); th->cover_data = mmap_ptr; th->cover_end = mmap_ptr + mmap_alloc_size; -#else - th->cover_data = (char*)&th->cover_buffer[0]; - th->cover_end = th->cover_data + sizeof(th->cover_buffer); -#endif } +#endif } void cover_enable(thread_t* th) { #if defined(__FreeBSD__) - if (!flag_cover) - return; debug("#%d: enabling /dev/kcov\n", th->id); int kcov_mode = flag_collect_comps ? KCOV_MODE_TRACE_CMP : KCOV_MODE_TRACE_PC; if (ioctl(th->cover_fd, KIOENABLE, &kcov_mode)) @@ -194,17 +185,12 @@ void cover_enable(thread_t* th) void cover_reset(thread_t* th) { #if defined(__FreeBSD__) - if (!flag_cover) - return; - *th->cover_size_ptr = 0; #endif } -uint32 read_cover_size(thread_t* th) +uint32 cover_read_size(thread_t* th) { - if (!flag_cover) - return 0; #if defined(__FreeBSD__) uint64 size = *th->cover_size_ptr; debug("#%d: read cover size = %llu\n", th->id, size); @@ -212,11 +198,7 @@ uint32 read_cover_size(thread_t* th) fail("#%d: too much cover %llu", th->id, size); return size; #else - // Fallback coverage since we have no real coverage available. - // We use syscall number or-ed with returned errno value as signal. - // At least this gives us all combinations of syscall+errno. - th->cover_data[0] = (th->call_num << 16) | ((th->res == -1 ? th->reserrno : 0) & 0x3ff); - return 1; + return 0; #endif } |
