X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Fdebug.c;h=66e911926a4cced405ac13b13d79a4a24dd40f14;hb=a6707cab2ede5adc59479d16000cb938b386db36;hp=2388a2daa3f23c7773c21094122b13c17c413610;hpb=6c24be470e7190a8888c8be707c2bc7d0290d204;p=pintos-anon diff --git a/src/lib/debug.c b/src/lib/debug.c index 2388a2d..66e9119 100644 --- a/src/lib/debug.c +++ b/src/lib/debug.c @@ -5,64 +5,16 @@ #include #include #ifdef KERNEL +#include "threads/init.h" #include "threads/interrupt.h" #include "devices/serial.h" #else #include #endif -#define MAX_CLASSES 16 -static bool all_enabled; -static const char *enabled_classes[MAX_CLASSES]; -static size_t enabled_cnt; - -static bool class_is_enabled (const char *class); - -/* Enables the debug message classes specified in CLASSES. The - string CLASSES is modified by and becomes owned by this - function. */ -void -debug_enable (char *classes) -{ - char *class, *save; - - for (class = strtok_r (classes, ",", &save); class != NULL; - class = strtok_r (NULL, ",", &save)) - { - if (strcmp (class, "all") && enabled_cnt < MAX_CLASSES) - enabled_classes[enabled_cnt++] = class; - else - all_enabled = true; - } -} - -/* Prints a debug message along with the source file name, line - number, and function name of where it was emitted. CLASS is - used to filter out unwanted messages. */ -void -debug_message (const char *file, int line, const char *function, - const char *class, const char *message, ...) -{ - if (class_is_enabled (class)) - { - va_list args; - -#ifdef KERNEL - enum intr_level old_level = intr_disable (); -#endif - printf ("%s:%d: %s(): ", file, line, function); - va_start (args, message); - vprintf (message, args); - printf ("\n"); - va_end (args); -#ifdef KERNEL - intr_set_level (old_level); -#endif - } -} - -/* 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, ...) @@ -73,7 +25,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,8 +38,14 @@ debug_panic (const char *file, int line, const char *function, 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); @@ -105,20 +68,3 @@ debug_backtrace (void) printf (" %p", frame[1]); printf (".\n"); } - - -/* Returns true if CLASS is enabled, false otherwise. */ -static bool -class_is_enabled (const char *class) -{ - size_t i; - - if (all_enabled) - return true; - - for (i = 0; i < enabled_cnt; i++) - if (!strcmp (enabled_classes[i], class)) - return true; - - return false; -}