GNU Linux-libre 6.1.90-gnu
[releases.git] / tools / objtool / include / objtool / cfi.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright (C) 2015-2017 Josh Poimboeuf <jpoimboe@redhat.com>
4  */
5
6 #ifndef _OBJTOOL_CFI_H
7 #define _OBJTOOL_CFI_H
8
9 #include <arch/cfi_regs.h>
10 #include <linux/list.h>
11
12 #define CFI_UNDEFINED           -1
13 #define CFI_CFA                 -2
14 #define CFI_SP_INDIRECT         -3
15 #define CFI_BP_INDIRECT         -4
16
17 struct cfi_reg {
18         int base;
19         int offset;
20 };
21
22 struct cfi_init_state {
23         struct cfi_reg regs[CFI_NUM_REGS];
24         struct cfi_reg cfa;
25 };
26
27 struct cfi_state {
28         struct hlist_node hash; /* must be first, cficmp() */
29         struct cfi_reg regs[CFI_NUM_REGS];
30         struct cfi_reg vals[CFI_NUM_REGS];
31         struct cfi_reg cfa;
32         int stack_size;
33         int drap_reg, drap_offset;
34         unsigned char type;
35         bool bp_scratch;
36         bool drap;
37         bool end;
38 };
39
40 #endif /* _OBJTOOL_CFI_H */