X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Fdebug.c;h=6d7c9e13bf064761b1496a232994040498b4c5d2;hb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999;hp=66e911926a4cced405ac13b13d79a4a24dd40f14;hpb=7a3dff52c8a44deeadd071ea93f19b9cee2a67fa;p=pintos-anon diff --git a/src/lib/debug.c b/src/lib/debug.c index 66e9119..6d7c9e1 100644 --- a/src/lib/debug.c +++ b/src/lib/debug.c @@ -4,53 +4,6 @@ #include #include #include -#ifdef KERNEL -#include "threads/init.h" -#include "threads/interrupt.h" -#include "devices/serial.h" -#else -#include -#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 -} /* Prints the call stack, that is, a list of addresses, one in each of the functions we are nested within. gdb or addr2line @@ -59,6 +12,7 @@ debug_panic (const char *file, int line, const char *function, void debug_backtrace (void) { + static bool explained; void **frame; printf ("Call stack:"); @@ -67,4 +21,12 @@ debug_backtrace (void) frame = frame[0]) printf (" %p", frame[1]); printf (".\n"); + + if (!explained) + { + explained = true; + 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"); + } }