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