1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:37:34 +00:00

Kernel: Add syscall performance event type

This allows tracing the syscalls made by a thread through the kernel's
performance event framework, which is similar in principle to strace.

Currently, this merely logs a stack backtrace to the current thread's
performance event buffer whenever a syscall is made, if profiling is
enabled. Future improvements could include tracing the arguments and
the return value, for example.
This commit is contained in:
Jean-Baptiste Boric 2021-08-10 21:02:59 +02:00 committed by Andreas Kling
parent 4c4b8ea443
commit 0286160b62
6 changed files with 24 additions and 1 deletions

View file

@ -119,6 +119,17 @@ public:
}
}
inline static void add_syscall_event(Thread& thread, const RegisterState& regs)
{
if (thread.is_profiling_suppressed())
return;
if (auto* event_buffer = thread.process().current_perf_events_buffer()) {
[[maybe_unused]] auto rc = event_buffer->append_with_ip_and_bp(
thread.pid(), thread.tid(),
regs.ip(), regs.bp(), PERF_EVENT_SYSCALL, 0, 0, 0, nullptr);
}
}
inline static void timer_tick(RegisterState const& regs)
{
static Time last_wakeup;