diff --git a/headers/private/kernel/debug.h b/headers/private/kernel/debug.h index 6d44ee7bf5..7baf17c061 100644 --- a/headers/private/kernel/debug.h +++ b/headers/private/kernel/debug.h @@ -129,6 +129,9 @@ extern bool print_debugger_command_usage(const char* command); extern void debug_set_demangle_hook(const char *(*hook)(const char *)); extern const char *debug_demangle(const char *); +extern struct thread* debug_set_debugged_thread(struct thread* thread); +extern struct thread* debug_get_debugged_thread(); + extern void _user_debug_output(const char *userString); #ifdef __cplusplus diff --git a/src/system/kernel/debug/debug.cpp b/src/system/kernel/debug/debug.cpp index c5bab56ab2..4a0fadf4a6 100644 --- a/src/system/kernel/debug/debug.cpp +++ b/src/system/kernel/debug/debug.cpp @@ -93,6 +93,8 @@ static int32 sCurrentLine = 0; static const char *(*sDemangleHook)(const char *) = NULL; +static struct thread* sDebuggedThread; + #define distance(a, b) ((a) < (b) ? (b) - (a) : (a) - (b)) @@ -1216,6 +1218,8 @@ kernel_debugger(const char *message) sDebugOutputFilter = &gDefaultDebugOutputFilter; + sDebuggedThread = NULL; + if (message) kprintf("PANIC: %s\n", message); @@ -1426,6 +1430,23 @@ debug_demangle(const char *sym) } +struct thread* +debug_set_debugged_thread(struct thread* thread) +{ + struct thread* previous = sDebuggedThread; + sDebuggedThread = thread; + return previous; +} + + +struct thread* +debug_get_debugged_thread() +{ + return sDebuggedThread != NULL + ? sDebuggedThread : thread_get_current_thread(); +} + + // #pragma mark - // userland syscalls