Add list_min(), list_max().
[pintos-anon] / src / lib / debug.c
index 2082eedd5714824894f56cb6225c91d8008fc935..6d75e7a34c47bf25332d5a9cc24ac9cc153c217b 100644 (file)
@@ -5,7 +5,9 @@
 #include <stdio.h>
 #include <string.h>
 #ifdef KERNEL
+#include "threads/init.h"
 #include "threads/interrupt.h"
+#include "devices/serial.h"
 #else
 #include <syscall.h>
 #endif
@@ -60,8 +62,9 @@ debug_message (const char *file, int line, const char *function,
     }
 }
 
-/* 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, ...)
@@ -72,7 +75,12 @@ debug_panic (const char *file, int line, const char *function,
   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");
@@ -81,6 +89,9 @@ debug_panic (const char *file, int line, const char *function,
   debug_backtrace ();
 
 #ifdef KERNEL
+  serial_flush ();
+  if (power_off_when_done)
+    power_off ();
   for (;;);
 #else
   exit (1);