projects
/
pintos-anon
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed backtrace to work with -O (now conforms to
[pintos-anon]
/
src
/
lib
/
debug.c
diff --git
a/src/lib/debug.c
b/src/lib/debug.c
index fafbc8c1acc69de41a5dfb4104f910c2365f4c84..b4f8c2d0b66ff0fc5542d213dc829101afdc0358 100644
(file)
--- a/
src/lib/debug.c
+++ b/
src/lib/debug.c
@@
-1,34
+1,32
@@
-#include
"debug.h"
+#include
<debug.h>
#include <stdarg.h>
#include <stdarg.h>
-#include "interrupt.h"
-#include "lib.h"
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+/* 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
void
-panic (const char *format, ...)
-{
- va_list args;
-
- intr_disable ();
-
- va_start (args, format);
- vprintk (format, args);
- printk ("\n");
- va_end (args);
-
- backtrace ();
-
- for (;;);
-}
-
-void
-backtrace (void)
+debug_backtrace (void)
{
{
+ static bool explained;
void **frame;
void **frame;
- print
k ("Call stack:"
);
- for (frame = __builtin_frame_address (
0
);
-
frame != NULL
&& frame[0] != NULL;
+ print
f ("Call stack: %p", __builtin_return_address (0)
);
+ for (frame = __builtin_frame_address (
1
);
+
(uintptr_t) frame >= 0x1000
&& frame[0] != NULL;
frame = frame[0])
frame = frame[0])
- printk (" %p", frame[1]);
- printk (".\n");
+ 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");
+ }
}
}