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 __asm__ __volatile__ ("mov %0, a1\n" : "=a"(sp)); 26 else 27 sp = (unsigned long *)task->thread.sp; 28 29 return sp; 30 } 31 32 void walk_stackframe(unsigned long *sp, 33 int (*fn)(struct stackframe *frame, void *data), 34 void *data); 35 36 #endif /* _XTENSA_STACKTRACE_H */ 37