* 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().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35535 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2010-02-20 14:00:56 +00:00
parent cd694fdbfa
commit 9e4ad0799b
+35 -14
View File
@@ -683,8 +683,17 @@ kgets(char* buffer, int length)
}
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,8 +702,14 @@ kernel_debugger_loop(const char* message, int32 cpu)
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");
@@ -869,7 +884,8 @@ hand_over_kernel_debugger()
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 @@ kernel_debugger_internal(const char* message, int32 cpu)
} 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 @@ debug_trap_cpu_in_kdl(int32 cpu, bool returnIfHandedOver)
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 @@ debug_trap_cpu_in_kdl(int32 cpu, bool returnIfHandedOver)
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 @@ void
panic(const char* format, ...)
{
va_list args;
char temp[128];
va_start(args, format);
vsnprintf(temp, sizeof(temp), format, args);
va_end(args);
kernel_debugger(temp);
cpu_status state = disable_interrupts();
kernel_debugger_internal("PANIC: ", format, args, smp_get_current_cpu());
restore_interrupts(state);
va_end(args);
}
@@ -1706,7 +1726,8 @@ kernel_debugger(const char* message)
{
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 @@ kprintf(const char* format, ...)
if (sDebugOutputFilter != NULL) {
va_list args;
va_start(args, format);
sDebugOutputFilter->Print(format, args);
kprintf_args(format, args);
va_end(args);
}
}