[haiku-commits] r35540 - haiku/trunk/src/system/kernel/debug

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 20 Feb 2010 18:16:21 +0100 (CET)

Author: bonefish
Date: 2010-02-20 18:16:21 +0100 (Sat, 20 Feb 2010)
New Revision: 35540
Changeset: http://dev.haiku-os.org/changeset/35540/haiku

Modified:
   haiku/trunk/src/system/kernel/debug/debug.cpp
Log:
Made the "message" command work correctly again. Broke it with my recent
changes.


Modified: haiku/trunk/src/system/kernel/debug/debug.cpp
===================================================================
--- haiku/trunk/src/system/kernel/debug/debug.cpp       2010-02-20 16:45:44 UTC 
(rev 35539)
+++ haiku/trunk/src/system/kernel/debug/debug.cpp       2010-02-20 17:16:21 UTC 
(rev 35540)
@@ -67,8 +67,6 @@
 
 static const char* const kKDLPrompt = "kdebug> ";
 
-static va_list kDummyVaList;
-
 extern "C" int kgets(char* buffer, int length);
 
 void call_modules_hook(bool enter);
@@ -94,7 +92,9 @@
 static struct ring_buffer* sSyslogBuffer;
 static bool sSyslogDropped = false;
 
+static const char* sCurrentKernelDebuggerMessagePrefix;
 static const char* sCurrentKernelDebuggerMessage;
+static va_list sCurrentKernelDebuggerMessageArgs;
 
 #define DEFAULT_SYSLOG_BUFFER_SIZE 65536
 #define OUTPUT_BUFFER_SIZE 1024
@@ -694,6 +694,23 @@
 
 
 static void
+print_kernel_debugger_message()
+{
+       if (sCurrentKernelDebuggerMessagePrefix != NULL
+                       || sCurrentKernelDebuggerMessage != NULL) {
+               if (sCurrentKernelDebuggerMessagePrefix != NULL)
+                       kprintf("%s", sCurrentKernelDebuggerMessagePrefix);
+               if (sCurrentKernelDebuggerMessage != NULL) {
+                       kprintf_args(sCurrentKernelDebuggerMessage,
+                               sCurrentKernelDebuggerMessageArgs);
+               }
+
+               kprintf("\n");
+       }
+}
+
+
+static void
 kernel_debugger_loop(const char* messagePrefix, const char* message,
        va_list args, int32 cpu)
 {
@@ -702,17 +719,12 @@
 
        DebugAllocPool* allocPool = create_debug_alloc_pool();
 
+       sCurrentKernelDebuggerMessagePrefix = messagePrefix;
        sCurrentKernelDebuggerMessage = message;
+       sCurrentKernelDebuggerMessageArgs = args;
 
-       if (messagePrefix != NULL || message != NULL) {
-               if (messagePrefix != NULL)
-                       kprintf("%s", messagePrefix);
-               if (message)
-                       kprintf_args(message, args);
+       print_kernel_debugger_message();
 
-               kprintf("\n");
-       }
-
        kprintf("Welcome to Kernel Debugging Land...\n");
 
        // Set a few temporary debug variables and print on which CPU and in 
which
@@ -916,11 +928,7 @@
 static int
 cmd_dump_kdl_message(int argc, char** argv)
 {
-       if (sCurrentKernelDebuggerMessage) {
-               kputs(sCurrentKernelDebuggerMessage);
-               kputs("\n");
-       }
-
+       print_kernel_debugger_message();
        return 0;
 }
 
@@ -1534,7 +1542,8 @@
                        if (returnIfHandedOver)
                                break;
 
-                       kernel_debugger_internal(NULL, NULL, kDummyVaList, cpu);
+                       kernel_debugger_internal(NULL, NULL,
+                               sCurrentKernelDebuggerMessageArgs, cpu);
                } else
                        smp_intercpu_int_handler(cpu);
        }
@@ -1546,7 +1555,8 @@
 void
 debug_double_fault(int32 cpu)
 {
-       kernel_debugger_internal("Double Fault!", NULL, kDummyVaList, cpu);
+       kernel_debugger_internal("Double Fault!", NULL,
+               sCurrentKernelDebuggerMessageArgs, cpu);
 }
 
 
@@ -1726,7 +1736,7 @@
 {
        cpu_status state = disable_interrupts();
 
-       kernel_debugger_internal(message, NULL, kDummyVaList,
+       kernel_debugger_internal(message, NULL, 
sCurrentKernelDebuggerMessageArgs,
                smp_get_current_cpu());
 
        restore_interrupts(state);


Other related posts:

  • » [haiku-commits] r35540 - haiku/trunk/src/system/kernel/debug - ingo_weinhold