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
11static void
12ia64_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 */
35void save_stack_trace(struct stack_trace *trace)
36{
37	unw_init_running(ia64_do_save_stack, trace);
38}
39EXPORT_SYMBOL(save_stack_trace);
40