Serenity Operating System
at master 37 lines 920 B view raw
1/* 2 * Copyright (c) 2021, Patrick Meyer <git@the-space.agency> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <Kernel/Devices/KCOVDevice.h> 8#include <Kernel/Thread.h> 9 10extern bool g_in_early_boot; 11 12extern "C" { 13 14void __sanitizer_cov_trace_pc(void); 15void __sanitizer_cov_trace_pc(void) 16{ 17 if (g_in_early_boot) [[unlikely]] 18 return; 19 20 if (Processor::current_in_irq()) [[unlikely]] { 21 // Do not trace in interrupts. 22 return; 23 } 24 25 auto const* thread = Thread::current(); 26 auto tid = thread->tid(); 27 auto maybe_kcov_instance = KCOVDevice::thread_instance->get(tid); 28 if (!maybe_kcov_instance.has_value()) [[likely]] { 29 // not traced 30 return; 31 } 32 auto* kcov_instance = maybe_kcov_instance.value(); 33 if (kcov_instance->state() < KCOVInstance::TRACING) [[likely]] 34 return; 35 kcov_instance->buffer_add_pc((u64)__builtin_return_address(0)); 36} 37}