linux/tools/objtool/check.h
<<
>>
Prefs
   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 rela *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 */
  62