From ff7eefe8e3df3af845f073e8cae6ce5d86ab4d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Thu, 21 Feb 2008 23:35:44 +0000 Subject: [PATCH] Call debugger_puts hooks on modules when serial debug output is enabled (modules themselves must reject loading if they don't find mymodule_debug_output in kernel settings). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24054 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/debug/debug.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/system/kernel/debug/debug.cpp b/src/system/kernel/debug/debug.cpp index 5201b38b2a..4d2bd30f1b 100644 --- a/src/system/kernel/debug/debug.cpp +++ b/src/system/kernel/debug/debug.cpp @@ -91,20 +91,30 @@ static int32 sCurrentLine = 0; static void kputchar(char c) { + uint32 i; + if (sSerialDebugEnabled) arch_debug_serial_putchar(c); if (sBlueScreenEnabled || sDebugScreenEnabled) blue_screen_putchar(c); + for (i = 0; sSerialDebugEnabled && i < kMaxDebuggerModules; i++) + if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_puts) + sDebuggerModules[i]->debugger_puts(&c, sizeof(c)); } void kputs(const char *s) { + uint32 i; + if (sSerialDebugEnabled) arch_debug_serial_puts(s); if (sBlueScreenEnabled || sDebugScreenEnabled) blue_screen_puts(s); + for (i = 0; sSerialDebugEnabled && i < kMaxDebuggerModules; i++) + if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_puts) + sDebuggerModules[i]->debugger_puts(s, strlen(s)); } @@ -1159,6 +1169,7 @@ flush_pending_repeats(void) { if (sMessageRepeatCount > 0) { int32 length; + uint32 i; if (sMessageRepeatCount > 1) { static char temp[40]; @@ -1171,6 +1182,9 @@ flush_pending_repeats(void) syslog_write(temp, length); if (sBlueScreenEnabled || sDebugScreenEnabled) blue_screen_puts(temp); + for (i = 0; sSerialDebugEnabled && i < kMaxDebuggerModules; i++) + if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_puts) + sDebuggerModules[i]->debugger_puts(temp, length); } else { // if we only have one repeat just reprint the last buffer if (sSerialDebugEnabled) @@ -1179,6 +1193,9 @@ flush_pending_repeats(void) syslog_write(sLastOutputBuffer, strlen(sLastOutputBuffer)); if (sBlueScreenEnabled || sDebugScreenEnabled) blue_screen_puts(sLastOutputBuffer); + for (i = 0; sSerialDebugEnabled && i < kMaxDebuggerModules; i++) + if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_puts) + sDebuggerModules[i]->debugger_puts(sLastOutputBuffer, strlen(sLastOutputBuffer)); } sMessageRepeatFirstTime = 0; @@ -1211,6 +1228,7 @@ dprintf_args(const char *format, va_list args, bool syslogOutput) { cpu_status state; int32 length; + uint32 i; // ToDo: maybe add a non-interrupt buffer and path that only // needs to acquire a semaphore instead of needing to disable @@ -1239,6 +1257,9 @@ dprintf_args(const char *format, va_list args, bool syslogOutput) syslog_write(sOutputBuffer, length); if (sBlueScreenEnabled || sDebugScreenEnabled) blue_screen_puts(sOutputBuffer); + for (i = 0; sSerialDebugEnabled && i < kMaxDebuggerModules; i++) + if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_puts) + sDebuggerModules[i]->debugger_puts(sOutputBuffer, length); memcpy(sLastOutputBuffer, sOutputBuffer, length); sLastOutputBuffer[length] = 0;