162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * arch/xtensa/include/asm/stacktrace.h 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 562306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 662306a36Sopenharmony_ci * for more details. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 2001 - 2013 Tensilica Inc. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#ifndef _XTENSA_STACKTRACE_H 1162306a36Sopenharmony_ci#define _XTENSA_STACKTRACE_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/sched.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct stackframe { 1662306a36Sopenharmony_ci unsigned long pc; 1762306a36Sopenharmony_ci unsigned long sp; 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic __always_inline unsigned long *stack_pointer(struct task_struct *task) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci unsigned long sp; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci if (!task || task == current) 2562306a36Sopenharmony_ci sp = current_stack_pointer; 2662306a36Sopenharmony_ci else 2762306a36Sopenharmony_ci sp = task->thread.sp; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci return (unsigned long *)sp; 3062306a36Sopenharmony_ci} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_civoid walk_stackframe(unsigned long *sp, 3362306a36Sopenharmony_ci int (*fn)(struct stackframe *frame, void *data), 3462306a36Sopenharmony_ci void *data); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_civoid xtensa_backtrace_kernel(struct pt_regs *regs, unsigned int depth, 3762306a36Sopenharmony_ci int (*kfn)(struct stackframe *frame, void *data), 3862306a36Sopenharmony_ci int (*ufn)(struct stackframe *frame, void *data), 3962306a36Sopenharmony_ci void *data); 4062306a36Sopenharmony_civoid xtensa_backtrace_user(struct pt_regs *regs, unsigned int depth, 4162306a36Sopenharmony_ci int (*ufn)(struct stackframe *frame, void *data), 4262306a36Sopenharmony_ci void *data); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#endif /* _XTENSA_STACKTRACE_H */ 45