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 */
11enum unwind_user_type_bits {
12 UNWIND_USER_TYPE_FP_BIT = 0,
13
14 NR_UNWIND_USER_TYPE_BITS,
15};
16
17enum 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
23struct unwind_stacktrace {
24 unsigned int nr;
25 unsigned long *entries;
26};
27
28struct unwind_user_frame {
29 s32 cfa_off;
30 s32 ra_off;
31 s32 fp_off;
32 bool use_fp;
33};
34
35struct 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