From e302fac34ba57ea9ce51384d49d1cfe5a33d859a Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Mon, 28 Mar 2022 22:12:28 +0200 Subject: [PATCH] kcov-example: Port to LibMain --- Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/kcov-example.cpp | 42 +++++++++-------------------- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 835d10cb07..6960d39486 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -124,6 +124,7 @@ target_link_libraries(install-bin LibMain) target_link_libraries(jp LibMain) target_link_libraries(js LibJS LibLine LibMain) link_with_unicode_data(js) +target_link_libraries(kcov-example LibMain) target_link_libraries(keymap LibKeyboard LibMain) target_link_libraries(kill LibMain) target_link_libraries(killall LibCore LibMain) diff --git a/Userland/Utilities/kcov-example.cpp b/Userland/Utilities/kcov-example.cpp index b8d45a1aaf..09fd471795 100644 --- a/Userland/Utilities/kcov-example.cpp +++ b/Userland/Utilities/kcov-example.cpp @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include +#include #include #include #include @@ -14,47 +16,27 @@ // Note: This program requires serenity to be built with the CMake build option // ENABLE_KERNEL_COVERAGE_COLLECTION -int main(void) +ErrorOr serenity_main(Main::Arguments) { constexpr size_t num_entries = 1024 * 100; - int fd = open("/dev/kcov0", O_RDWR); - if (fd == -1) { - perror("open"); - fprintf(stderr, "Could not open /dev/kcov0 - is ENABLE_KERNEL_COVERAGE_COLLECTION enabled?\n"); - return 1; - } - if (ioctl(fd, KCOV_SETBUFSIZE, num_entries) == -1) { - perror("ioctl: KCOV_SETBUFSIZE"); - return 1; - } - kcov_pc_t* cover = (kcov_pc_t*)mmap(NULL, num_entries * KCOV_ENTRY_SIZE, - PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (cover == MAP_FAILED) { - perror("mmap"); - return 1; - } - if (ioctl(fd, KCOV_ENABLE) == -1) { - perror("ioctl: KCOV_ENABLE"); - return 1; - } + int fd = TRY(Core::System::open("/dev/kcov0", O_RDWR)); + TRY(Core::System::ioctl(fd, KCOV_SETBUFSIZE, num_entries)); + kcov_pc_t* cover = (kcov_pc_t*)TRY(Core::System::mmap(NULL, num_entries * KCOV_ENTRY_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)); + TRY(Core::System::ioctl(fd, KCOV_ENABLE)); cover[0] = 0; // Example syscall so we actually cover some kernel code. getppid(); - if (ioctl(fd, KCOV_DISABLE) == -1) { - perror("ioctl: KCOV_DISABLE"); - return 1; - } + TRY(Core::System::ioctl(fd, KCOV_DISABLE)); + u64 cov_idx = cover[0]; for (size_t idx = 1; idx <= cov_idx; idx++) printf("%p\n", (void*)cover[idx]); - if (munmap(const_cast(cover), num_entries * KCOV_ENTRY_SIZE) == -1) { - perror("munmap"); - return 1; - } - close(fd); + + TRY(Core::System::munmap(const_cast(cover), num_entries * KCOV_ENTRY_SIZE)); + TRY(Core::System::close(fd)); return 0; }