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

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 20 Feb 2010 15:00:56 +0100 (CET)

Author: bonefish
Date: 2010-02-20 15:00:56 +0100 (Sat, 20 Feb 2010)
New Revision: 35535
Changeset: http://dev.haiku-os.org/changeset/35535/haiku

Modified:
   haiku/trunk/src/system/kernel/debug/debug.cpp
Log:
* Pass the panic() format and args through to kernel_debugger_loop(), so that
  the message doesn't get truncated.
* No longer print the "PANIC:" prefix when entering the kernel debugger via
  kernel_debugger().


Modified: haiku/trunk/src/system/kernel/debug/debug.cpp
===================================================================
--- haiku/trunk/src/system/kernel/debug/debug.cpp       2010-02-20 13:19:41 UTC 
(rev 35534)
+++ haiku/trunk/src/system/kernel/debug/debug.cpp       2010-02-20 14:00:56 UTC 
(rev 35535)
@@ -683,8 +683,17 @@
 }
 
 
+static inline void
+kprintf_args(const char* format, va_list args)
+{
+       if (sDebugOutputFilter != NULL)
+               sDebugOutputFilter->Print(format, args);
+}
+
+
 static void
-kernel_debugger_loop(const char* message, int32 cpu)
+kernel_debugger_loop(const char* messagePrefix, const char* message,
+       va_list args, int32 cpu)
 {
        int32 previousCPU = sDebuggerOnCPU;
        sDebuggerOnCPU = cpu;
@@ -693,9 +702,15 @@
 
        sCurrentKernelDebuggerMessage = message;
 
-       if (message)
-               kprintf("PANIC: %s\n", message);
+       if (messagePrefix != NULL || message != NULL) {
+               if (messagePrefix != NULL)
+                       kprintf("%s", messagePrefix);
+               if (message)
+                       kprintf_args(message, args);
 
+               kprintf("\n");
+       }
+
        kprintf("Welcome to Kernel Debugging Land...\n");
 
        // Set a few temporary debug variables and print on which CPU and in 
which
@@ -869,7 +884,8 @@
 
 
 static void
-kernel_debugger_internal(const char* message, int32 cpu)
+kernel_debugger_internal(const char* messagePrefix, const char* message,
+       va_list args, int32 cpu)
 {
        while (true) {
                if (sHandOverKDLToCPU == cpu) {
@@ -878,7 +894,7 @@
                } else
                        enter_kernel_debugger(cpu);
 
-               kernel_debugger_loop(message, cpu);
+               kernel_debugger_loop(messagePrefix, message, args, cpu);
 
                if (sHandOverKDLToCPU < 0) {
                        exit_kernel_debugger();
@@ -1516,7 +1532,8 @@
                        if (returnIfHandedOver)
                                break;
 
-                       kernel_debugger_internal(NULL, cpu);
+                       va_list dummy;
+                       kernel_debugger_internal(NULL, NULL, dummy, cpu);
                } else
                        smp_intercpu_int_handler(cpu);
        }
@@ -1528,7 +1545,8 @@
 void
 debug_double_fault(int32 cpu)
 {
-       kernel_debugger_internal("Double Fault!\n", cpu);
+       va_list dummy;
+       kernel_debugger_internal("Double Fault!", NULL, dummy, cpu);
 }
 
 
@@ -1691,13 +1709,15 @@
 panic(const char* format, ...)
 {
        va_list args;
-       char temp[128];
+       va_start(args, format);
 
-       va_start(args, format);
-       vsnprintf(temp, sizeof(temp), format, args);
+       cpu_status state = disable_interrupts();
+
+       kernel_debugger_internal("PANIC: ", format, args, 
smp_get_current_cpu());
+
+       restore_interrupts(state);
+
        va_end(args);
-
-       kernel_debugger(temp);
 }
 
 
@@ -1706,7 +1726,8 @@
 {
        cpu_status state = disable_interrupts();
 
-       kernel_debugger_internal(message, smp_get_current_cpu());
+       va_list dummy;
+       kernel_debugger_internal(message, NULL, dummy, smp_get_current_cpu());
 
        restore_interrupts(state);
 }
@@ -1759,7 +1780,7 @@
        if (sDebugOutputFilter != NULL) {
                va_list args;
                va_start(args, format);
-               sDebugOutputFilter->Print(format, args);
+               kprintf_args(format, args);
                va_end(args);
        }
 }


Other related posts:

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