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:
parent
4c4b8ea443
commit
0286160b62
6 changed files with 24 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue