diff options
-rw-r--r-- | arch/arm/kernel/stacktrace.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 5a80ddfe7031..f065eb05d254 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
@@ -149,6 +149,25 @@ static noinline void __save_stack_trace(struct task_struct *tsk, | |||
149 | trace->entries[trace->nr_entries++] = ULONG_MAX; | 149 | trace->entries[trace->nr_entries++] = ULONG_MAX; |
150 | } | 150 | } |
151 | 151 | ||
152 | void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace) | ||
153 | { | ||
154 | struct stack_trace_data data; | ||
155 | struct stackframe frame; | ||
156 | |||
157 | data.trace = trace; | ||
158 | data.skip = trace->skip; | ||
159 | data.no_sched_functions = 0; | ||
160 | |||
161 | frame.fp = regs->ARM_fp; | ||
162 | frame.sp = regs->ARM_sp; | ||
163 | frame.lr = regs->ARM_lr; | ||
164 | frame.pc = regs->ARM_pc; | ||
165 | |||
166 | walk_stackframe(&frame, save_trace, &data); | ||
167 | if (trace->nr_entries < trace->max_entries) | ||
168 | trace->entries[trace->nr_entries++] = ULONG_MAX; | ||
169 | } | ||
170 | |||
152 | void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) | 171 | void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) |
153 | { | 172 | { |
154 | __save_stack_trace(tsk, trace, 1); | 173 | __save_stack_trace(tsk, trace, 1); |