at v5.9 61 lines 1.3 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Copyright (C) 2017 Josh Poimboeuf <jpoimboe@redhat.com> 4 */ 5 6#ifndef _CHECK_H 7#define _CHECK_H 8 9#include <stdbool.h> 10#include "cfi.h" 11#include "arch.h" 12 13struct insn_state { 14 struct cfi_state cfi; 15 unsigned int uaccess_stack; 16 bool uaccess; 17 bool df; 18 bool noinstr; 19 s8 instr; 20}; 21 22struct instruction { 23 struct list_head list; 24 struct hlist_node hash; 25 struct section *sec; 26 unsigned long offset; 27 unsigned int len; 28 enum insn_type type; 29 unsigned long immediate; 30 bool dead_end, ignore, ignore_alts; 31 bool hint; 32 bool retpoline_safe; 33 s8 instr; 34 u8 visited; 35 u8 ret_offset; 36 int alt_group; 37 struct symbol *call_dest; 38 struct instruction *jump_dest; 39 struct instruction *first_jump_src; 40 struct reloc *jump_table; 41 struct list_head alts; 42 struct symbol *func; 43 struct list_head stack_ops; 44 struct cfi_state cfi; 45 struct orc_entry orc; 46}; 47 48struct instruction *find_insn(struct objtool_file *file, 49 struct section *sec, unsigned long offset); 50 51#define for_each_insn(file, insn) \ 52 list_for_each_entry(insn, &file->insn_list, list) 53 54#define sec_for_each_insn(file, sec, insn) \ 55 for (insn = find_insn(file, sec, 0); \ 56 insn && &insn->list != &file->insn_list && \ 57 insn->sec == sec; \ 58 insn = list_next_entry(insn, list)) 59 60 61#endif /* _CHECK_H */