forked from Minki/linux
85718fae2a
Several Linux features are dependent on stack trace support. Add it so they can be enabled. Signed-off-by: Tony Luck <tony.luck@intel.com>
40 lines
776 B
C
40 lines
776 B
C
/*
|
|
* arch/ia64/kernel/stacktrace.c
|
|
*
|
|
* Stack trace management functions
|
|
*
|
|
*/
|
|
#include <linux/sched.h>
|
|
#include <linux/stacktrace.h>
|
|
#include <linux/module.h>
|
|
|
|
static void
|
|
ia64_do_save_stack(struct unw_frame_info *info, void *arg)
|
|
{
|
|
struct stack_trace *trace = arg;
|
|
unsigned long ip;
|
|
int skip = trace->skip;
|
|
|
|
trace->nr_entries = 0;
|
|
do {
|
|
unw_get_ip(info, &ip);
|
|
if (ip == 0)
|
|
break;
|
|
if (skip == 0) {
|
|
trace->entries[trace->nr_entries++] = ip;
|
|
if (trace->nr_entries == trace->max_entries)
|
|
break;
|
|
} else
|
|
skip--;
|
|
} while (unw_unwind(info) >= 0);
|
|
}
|
|
|
|
/*
|
|
* Save stack-backtrace addresses into a stack_trace buffer.
|
|
*/
|
|
void save_stack_trace(struct stack_trace *trace)
|
|
{
|
|
unw_init_running(ia64_do_save_stack, trace);
|
|
}
|
|
EXPORT_SYMBOL(save_stack_trace);
|