sparc64: add function save_stack_trace_tsk()
PATCH 1/1 sparc64: add function save_stack_trace_tsk()
Hi
Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'
---
Add function save_stack_trace_tsk() on sparc64.
---
arch/sparc64/kernel/stacktrace.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
arch/sparc64/kernel/stacktrace.c +8 -2
@@ -7,9 +7,9 @@#include "kstack.h" -void save_stack_trace (struct stack_trace *trace) +void save_stack_trace_tsk (struct task_struct *tsk,struct stack_trace *trace) { -struct thread_info *tp =task_thread_info (current); +struct thread_info *tp =task_thread_info (tsk);unsigned long ksp, fp;stack_trace_flush ();
@@ -47,4 +47,10 @@ void save_stack_trace(struct stack_trace *trace) trace->entries[trace->nr_entries++] = pc; }while (trace->nr_entries < trace->max_entries); } +EXPORT_SYMBOL_GPL (save_stack_trace_tsk); + +inline void save_stack_trace (struct stack_trace *trace) +{ +save_stack_trace_tsk (current, trace); +}EXPORT_SYMBOL_GPL (save_stack_trace);
2008/11/12 Alexander Beregalov <[email protected]>:
Quoted 8 lines
Hi
Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'
Quoted 7 lines
---
Add function
save_stack_trace_tsk()on sparc64.Signed-off-by Alexander Beregalov <[email protected]>---
No, it does not work, it is not so simple.
From: Alexander Beregalov <[email protected]>
Date: Wed, 12 Nov 2008 16:47:49 +0300
Quoted 6 lines
Current -next does not build on sparc64:
LD .tmp_vmlinux1
fs/built-in.o: In function `proc_pid_stack':
/home/alexb/linux-2.6/fs/proc/base.c:360: undefined reference to `save_stack_trace_tsk'
Quoted 6 lines
---
Add function
save_stack_trace_tsk()on sparc64.Signed-off-by Alexander Beregalov <[email protected]>
This won't work as-is.
The save_stack_trace() function starts with the actual frame-pointer register in the current cpu to start winding back the stack. So when 'tsk' is not 'current' nothing will be saved. That's what this bit of code is doing:
__asm__ __volatile__( "mov %%fp, %0" : "=r" (ksp) ); fp = ksp + STACK_BIAS;
Also, "stack_trace_flush()" should only be run when current = tsk.