#include <stdio.h>
#include <string.h>
#ifdef KERNEL
+#include "threads/init.h"
#include "threads/interrupt.h"
#include "devices/serial.h"
#else
}
}
-/* Halts the OS, printing the source file name, line number, and
- function name, plus a user-specific message. */
+/* Halts the OS or user program, printing the source file name,
+ line number, and function name, plus a user-specific
+ message. */
void
debug_panic (const char *file, int line, const char *function,
const char *message, ...)
intr_disable ();
#endif
- printf ("PANIC at %s:%d in %s(): ", file, line, function);
+#ifdef KERNEL
+ printf ("Kernel PANIC at %s:%d in %s(): ", file, line, function);
+#else
+ printf ("User process panic at %s:%d in %s(): ", file, line, function);
+#endif
+
va_start (args, message);
vprintf (message, args);
printf ("\n");
debug_backtrace ();
+ printf ("The `backtrace' program can make call stacks useful.\n"
+ "Read \"Backtraces\" in the \"Debugging Tools\" chapter\n"
+ "of the Pintos documentation for more information.\n");
+
#ifdef KERNEL
serial_flush ();
+ if (power_off_when_done)
+ power_off ();
for (;;);
#else
exit (1);