1 /* 2 * arch/xtensa/include/asm/stacktrace.h 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file "COPYING" in the main directory of this archive 6 * for more details. 7 * 8 * Copyright (C) 2001 - 2013 Tensilica Inc. 9 */ 10 #ifndef _XTENSA_STACKTRACE_H 11 #define _XTENSA_STACKTRACE_H 12 13 #include <linux/sched.h> 14 15 struct stackframe { 16 unsigned long pc; 17 unsigned long sp; 18 }; 19 20 static __always_inline unsigned long *stack_pointer(struct task_struct *task) 21 { 22 unsigned long sp; 23 24 if (!task || task == current) 25 sp = current_stack_pointer; 26 else 27 sp = task->thread.sp; 28 29 return (unsigned long *)sp; 30 } 31 32 void walk_stackframe(unsigned long *sp, 33 int (*fn)(struct stackframe *frame, void *data), 34 void *data); 35 36 void xtensa_backtrace_kernel(struct pt_regs *regs, unsigned int depth, 37 int (*kfn)(struct stackframe *frame, void *data), 38 int (*ufn)(struct stackframe *frame, void *data), 39 void *data); 40 void xtensa_backtrace_user(struct pt_regs *regs, unsigned int depth, 41 int (*ufn)(struct stackframe *frame, void *data), 42 void *data); 43 44 #endif /* _XTENSA_STACKTRACE_H */ 45