X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Fdebug.c;h=2388a2daa3f23c7773c21094122b13c17c413610;hb=5f9b230c5ca5f75dc7fe5619cdec350322cfef5f;hp=534fc02c6d9066438f04e3538bd4a09dd6c3a741;hpb=af3f05309d7fb5a509946a4e9fd8465e9f782a3e;p=pintos-anon diff --git a/src/lib/debug.c b/src/lib/debug.c index 534fc02..2388a2d 100644 --- a/src/lib/debug.c +++ b/src/lib/debug.c @@ -1,7 +1,15 @@ -#include "debug.h" +#include #include -#include "interrupt.h" -#include "lib.h" +#include +#include +#include +#include +#ifdef KERNEL +#include "threads/interrupt.h" +#include "devices/serial.h" +#else +#include +#endif #define MAX_CLASSES 16 static bool all_enabled; @@ -39,13 +47,17 @@ debug_message (const char *file, int line, const char *function, { va_list args; +#ifdef KERNEL enum intr_level old_level = intr_disable (); - printk ("%s:%d: %s(): ", file, line, function); +#endif + printf ("%s:%d: %s(): ", file, line, function); va_start (args, message); - vprintk (message, args); - printk ("\n"); + vprintf (message, args); + printf ("\n"); va_end (args); +#ifdef KERNEL intr_set_level (old_level); +#endif } } @@ -57,34 +69,41 @@ debug_panic (const char *file, int line, const char *function, { va_list args; +#ifdef KERNEL intr_disable (); +#endif - printk ("PANIC at %s:%d in %s(): ", file, line, function); + printf ("PANIC at %s:%d in %s(): ", file, line, function); va_start (args, message); - vprintk (message, args); - printk ("\n"); + vprintf (message, args); + printf ("\n"); va_end (args); debug_backtrace (); +#ifdef KERNEL + serial_flush (); for (;;); +#else + exit (1); +#endif } -/* Prints the call stack, that is, a list of addresses in each of - the functions we are nested within. gdb or addr2line may be - applied to kernel.o to translate these into file names, line - numbers, and function names. */ +/* Prints the call stack, that is, a list of addresses, one in + each of the functions we are nested within. gdb or addr2line + may be applied to kernel.o to translate these into file names, + line numbers, and function names. */ void debug_backtrace (void) { void **frame; - printk ("Call stack:"); + printf ("Call stack:"); for (frame = __builtin_frame_address (0); frame != NULL && frame[0] != NULL; frame = frame[0]) - printk (" %p", frame[1]); - printk (".\n"); + printf (" %p", frame[1]); + printf (".\n"); }