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