-#ifdef KERNEL
-#include "threads/init.h"
-#include "threads/interrupt.h"
-#include "devices/serial.h"
-#else
-#include <syscall.h>
-#endif
-
-/* 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, ...)
-{
- va_list args;
-
-#ifdef KERNEL
- intr_disable ();
-#endif
-
-#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");
- va_end (args);
-
- 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);
-#endif
-}