6d7c9e13bf064761b1496a232994040498b4c5d2
[pintos-anon] / src / lib / debug.c
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.  */
12 void
13 debug_backtrace (void) 
14 {
15   static bool explained;
16   void **frame;
17   
18   printf ("Call stack:");
19   for (frame = __builtin_frame_address (0);
20        frame != NULL && 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 }