Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stacktrace.c
Go to the documentation of this file.
1 /*
2  * arch/ia64/kernel/stacktrace.c
3  *
4  * Stack trace management functions
5  *
6  */
7 #include <linux/sched.h>
8 #include <linux/stacktrace.h>
9 #include <linux/module.h>
10 
11 static void
12 ia64_do_save_stack(struct unw_frame_info *info, void *arg)
13 {
14  struct stack_trace *trace = arg;
15  unsigned long ip;
16  int skip = trace->skip;
17 
18  trace->nr_entries = 0;
19  do {
20  unw_get_ip(info, &ip);
21  if (ip == 0)
22  break;
23  if (skip == 0) {
24  trace->entries[trace->nr_entries++] = ip;
25  if (trace->nr_entries == trace->max_entries)
26  break;
27  } else
28  skip--;
29  } while (unw_unwind(info) >= 0);
30 }
31 
32 /*
33  * Save stack-backtrace addresses into a stack_trace buffer.
34  */
35 void save_stack_trace(struct stack_trace *trace)
36 {
37  unw_init_running(ia64_do_save_stack, trace);
38 }