diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/stacktrace.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 77ef35efaa8..398d0c0511e 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
@@ -52,21 +52,15 @@ static int save_trace(struct stackframe *frame, void *d) | |||
52 | return trace->nr_entries >= trace->max_entries; | 52 | return trace->nr_entries >= trace->max_entries; |
53 | } | 53 | } |
54 | 54 | ||
55 | void save_stack_trace(struct stack_trace *trace, struct task_struct *task) | 55 | void save_stack_trace(struct stack_trace *trace) |
56 | { | 56 | { |
57 | struct stack_trace_data data; | 57 | struct stack_trace_data data; |
58 | unsigned long fp, base; | 58 | unsigned long fp, base; |
59 | 59 | ||
60 | data.trace = trace; | 60 | data.trace = trace; |
61 | data.skip = trace->skip; | 61 | data.skip = trace->skip; |
62 | 62 | base = (unsigned long)task_stack_page(current); | |
63 | if (task) { | 63 | asm("mov %0, fp" : "=r" (fp)); |
64 | base = (unsigned long)task_stack_page(task); | ||
65 | fp = 0; /* FIXME */ | ||
66 | } else { | ||
67 | base = (unsigned long)task_stack_page(current); | ||
68 | asm("mov %0, fp" : "=r" (fp)); | ||
69 | } | ||
70 | 64 | ||
71 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); | 65 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); |
72 | } | 66 | } |