xref: /linux/include/linux/unwind_user_types.h (revision c6439bfaabf25b736154ac5640c677da2c085db4)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_UNWIND_USER_TYPES_H
3 #define _LINUX_UNWIND_USER_TYPES_H
4 
5 #include <linux/types.h>
6 
7 /*
8  * Unwind types, listed in priority order: lower numbers are attempted first if
9  * available.
10  */
11 enum unwind_user_type_bits {
12 	UNWIND_USER_TYPE_FP_BIT =		0,
13 
14 	NR_UNWIND_USER_TYPE_BITS,
15 };
16 
17 enum unwind_user_type {
18 	/* Type "none" for the start of stack walk iteration. */
19 	UNWIND_USER_TYPE_NONE =			0,
20 	UNWIND_USER_TYPE_FP =			BIT(UNWIND_USER_TYPE_FP_BIT),
21 };
22 
23 struct unwind_stacktrace {
24 	unsigned int	nr;
25 	unsigned long	*entries;
26 };
27 
28 struct unwind_user_frame {
29 	s32 cfa_off;
30 	s32 ra_off;
31 	s32 fp_off;
32 	bool use_fp;
33 };
34 
35 struct unwind_user_state {
36 	unsigned long				ip;
37 	unsigned long				sp;
38 	unsigned long				fp;
39 	enum unwind_user_type			current_type;
40 	unsigned int				available_types;
41 	bool					done;
42 };
43 
44 #endif /* _LINUX_UNWIND_USER_TYPES_H */
45