X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Flib%2Fdebug.c;h=1dc1bf8fd69db3c5651654620dcf79200cbf6844;hp=66e911926a4cced405ac13b13d79a4a24dd40f14;hb=bb940d21474958a1d8ee2abffdcb6bac27918398;hpb=7a3dff52c8a44deeadd071ea93f19b9cee2a67fa diff --git a/src/lib/debug.c b/src/lib/debug.c index 66e9119..1dc1bf8 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,12 +12,21 @@ debug_panic (const char *file, int line, const char *function, void debug_backtrace (void) { + static bool explained; void **frame; printf ("Call stack:"); for (frame = __builtin_frame_address (0); - frame != NULL && frame[0] != NULL; + (uintptr_t) frame >= 0x1000 && frame[0] != NULL; 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"); + } }