From 309d71a66b63fe1390c0d0a2225a43813c40b73d Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Sat, 15 Jan 2022 21:19:41 +0200 Subject: [PATCH] Kernel: Use kernelputstr instead of dbgln when printing backtraces This will allow us to eventually switch dbgln in the kernel to an allocation-free (although length-bounded) formatter. --- Kernel/Scheduler.cpp | 11 +++++++++-- Kernel/Thread.cpp | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 4b537f20a8..b6c3a7df19 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -18,6 +18,7 @@ #include #include #include +#include // Remove this once SMP is stable and can be enabled by default #define SCHEDULE_ON_ALL_PROCESSORS 0 @@ -595,8 +596,14 @@ void dump_thread_list(bool with_stack_traces) thread.times_scheduled()); break; } - if (with_stack_traces) - dbgln("{}", thread.backtrace()); + if (with_stack_traces) { + auto trace_or_error = thread.backtrace(); + if (!trace_or_error.is_error()) { + auto trace = trace_or_error.release_value(); + dbgln("Backtrace:"); + kernelputstr(trace->characters(), trace->length()); + } + } return IterationDecision::Continue; }); } diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index d218c6b697..220b7bf966 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include namespace Kernel { @@ -501,8 +502,14 @@ void Thread::finalize() m_join_blocker_set.thread_finalizing(); } - if (m_dump_backtrace_on_finalization) - dbgln("{}", backtrace()); + if (m_dump_backtrace_on_finalization) { + auto trace_or_error = backtrace(); + if (!trace_or_error.is_error()) { + auto trace = trace_or_error.release_value(); + dbgln("Backtrace:"); + kernelputstr(trace->characters(), trace->length()); + } + } drop_thread_count(false); }