18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * arch/xtensa/include/asm/stacktrace.h 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 58c2ecf20Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 68c2ecf20Sopenharmony_ci * for more details. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Copyright (C) 2001 - 2013 Tensilica Inc. 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci#ifndef _XTENSA_STACKTRACE_H 118c2ecf20Sopenharmony_ci#define _XTENSA_STACKTRACE_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/sched.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct stackframe { 168c2ecf20Sopenharmony_ci unsigned long pc; 178c2ecf20Sopenharmony_ci unsigned long sp; 188c2ecf20Sopenharmony_ci}; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistatic __always_inline unsigned long *stack_pointer(struct task_struct *task) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci unsigned long *sp; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci if (!task || task == current) 258c2ecf20Sopenharmony_ci __asm__ __volatile__ ("mov %0, a1\n" : "=a"(sp)); 268c2ecf20Sopenharmony_ci else 278c2ecf20Sopenharmony_ci sp = (unsigned long *)task->thread.sp; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci return sp; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_civoid walk_stackframe(unsigned long *sp, 338c2ecf20Sopenharmony_ci int (*fn)(struct stackframe *frame, void *data), 348c2ecf20Sopenharmony_ci void *data); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_civoid xtensa_backtrace_kernel(struct pt_regs *regs, unsigned int depth, 378c2ecf20Sopenharmony_ci int (*kfn)(struct stackframe *frame, void *data), 388c2ecf20Sopenharmony_ci int (*ufn)(struct stackframe *frame, void *data), 398c2ecf20Sopenharmony_ci void *data); 408c2ecf20Sopenharmony_civoid xtensa_backtrace_user(struct pt_regs *regs, unsigned int depth, 418c2ecf20Sopenharmony_ci int (*ufn)(struct stackframe *frame, void *data), 428c2ecf20Sopenharmony_ci void *data); 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#endif /* _XTENSA_STACKTRACE_H */ 45