1 #include <linux/sched.h>
2 #include <linux/stacktrace.h>
3 #include <linux/thread_info.h>
4 #include <linux/module.h>
5 #include <asm/ptrace.h>
6 #include <asm/stacktrace.h>
10 void save_stack_trace(struct stack_trace
*trace
)
12 unsigned long ksp
, fp
, thread_base
;
13 struct thread_info
*tp
= task_thread_info(current
);
22 fp
= ksp
+ STACK_BIAS
;
23 thread_base
= (unsigned long) tp
;
25 struct sparc_stackf
*sf
;
29 if (!kstack_valid(tp
, fp
))
32 sf
= (struct sparc_stackf
*) fp
;
33 regs
= (struct pt_regs
*) (sf
+ 1);
35 if (kstack_is_trap_frame(tp
, regs
)) {
36 if (!(regs
->tstate
& TSTATE_PRIV
))
39 fp
= regs
->u_regs
[UREG_I6
] + STACK_BIAS
;
42 fp
= (unsigned long)sf
->fp
+ STACK_BIAS
;
48 trace
->entries
[trace
->nr_entries
++] = pc
;
49 } while (trace
->nr_entries
< trace
->max_entries
);
51 EXPORT_SYMBOL_GPL(save_stack_trace
);