summaryrefslogtreecommitdiffstats
path: root/pintos-progos/lib/debug.c
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2012-03-26 12:54:45 +0200
committermanuel <manuel@mausz.at>2012-03-26 12:54:45 +0200
commitb5f0874cd96ee2a62aabc645b9626c2749cb6a01 (patch)
tree1262e4bbe0634de6650be130c36e0538240f4cbf /pintos-progos/lib/debug.c
downloadprogos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.tar.gz
progos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.tar.bz2
progos-b5f0874cd96ee2a62aabc645b9626c2749cb6a01.zip
initial pintos checkin
Diffstat (limited to 'pintos-progos/lib/debug.c')
-rw-r--r--pintos-progos/lib/debug.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/pintos-progos/lib/debug.c b/pintos-progos/lib/debug.c
new file mode 100644
index 0000000..b4f8c2d
--- /dev/null
+++ b/pintos-progos/lib/debug.c
@@ -0,0 +1,32 @@
1#include <debug.h>
2#include <stdarg.h>
3#include <stdbool.h>
4#include <stddef.h>
5#include <stdio.h>
6#include <string.h>
7
8/* Prints the call stack, that is, a list of addresses, one in
9 each of the functions we are nested within. gdb or addr2line
10 may be applied to kernel.o to translate these into file names,
11 line numbers, and function names. */
12void
13debug_backtrace (void)
14{
15 static bool explained;
16 void **frame;
17
18 printf ("Call stack: %p", __builtin_return_address (0));
19 for (frame = __builtin_frame_address (1);
20 (uintptr_t) frame >= 0x1000 && frame[0] != NULL;
21 frame = frame[0])
22 printf (" %p", frame[1]);
23 printf (".\n");
24
25 if (!explained)
26 {
27 explained = true;
28 printf ("The `backtrace' program can make call stacks useful.\n"
29 "Read \"Backtraces\" in the \"Debugging Tools\" chapter\n"
30 "of the Pintos documentation for more information.\n");
31 }
32}