xref: /OK3568_Linux_fs/kernel/arch/nds32/include/asm/stacktrace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright (C) 2008-2018 Andes Technology Corporation */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __ASM_STACKTRACE_H
5*4882a593Smuzhiyun #define __ASM_STACKTRACE_H
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun /* Kernel callchain */
8*4882a593Smuzhiyun struct stackframe {
9*4882a593Smuzhiyun 	unsigned long fp;
10*4882a593Smuzhiyun 	unsigned long sp;
11*4882a593Smuzhiyun 	unsigned long lp;
12*4882a593Smuzhiyun };
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /*
15*4882a593Smuzhiyun  * struct frame_tail: User callchain
16*4882a593Smuzhiyun  * IMPORTANT:
17*4882a593Smuzhiyun  * This struct is used for call-stack walking,
18*4882a593Smuzhiyun  * the order and types matters.
19*4882a593Smuzhiyun  * Do not use array, it only stores sizeof(pointer)
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * The details can refer to arch/arm/kernel/perf_event.c
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun struct frame_tail {
24*4882a593Smuzhiyun 	unsigned long stack_fp;
25*4882a593Smuzhiyun 	unsigned long stack_lp;
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* For User callchain with optimize for size */
29*4882a593Smuzhiyun struct frame_tail_opt_size {
30*4882a593Smuzhiyun 	unsigned long stack_r6;
31*4882a593Smuzhiyun 	unsigned long stack_fp;
32*4882a593Smuzhiyun 	unsigned long stack_gp;
33*4882a593Smuzhiyun 	unsigned long stack_lp;
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun extern void
37*4882a593Smuzhiyun get_real_ret_addr(unsigned long *addr, struct task_struct *tsk, int *graph);
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #endif /* __ASM_STACKTRACE_H */
40