insn_state
int *insn_state;
if (e == BRANCH && insn_state[t] >= (DISCOVERED | BRANCH))
if (insn_state[w] == 0) {
insn_state[t] = DISCOVERED | e;
insn_state[w] = DISCOVERED;
} else if ((insn_state[w] & 0xF0) == DISCOVERED) {
} else if (insn_state[w] == EXPLORED) {
insn_state[t] = DISCOVERED | e;
int *insn_state = env->cfg.insn_state;
if (insn_state[w])
insn_state[w] |= DISCOVERED;
int *insn_stack, *insn_state;
insn_state = env->cfg.insn_state = kvzalloc_objs(int, insn_cnt,
if (!insn_state)
kvfree(insn_state);
insn_state[0] = DISCOVERED; /* mark 1st insn as discovered */
insn_state[t] = EXPLORED;
if (ex_insn_beg && insn_state[ex_insn_beg] != EXPLORED) {
insn_state[ex_insn_beg] = DISCOVERED;
if (insn_state[i] != EXPLORED) {
if (insn_state[i + 1] != 0) {
kvfree(insn_state);
env->cfg.insn_state = env->cfg.insn_stack = NULL;
int *insn_state = env->cfg.insn_state;
if (e == FALLTHROUGH && insn_state[t] >= (DISCOVERED | FALLTHROUGH))
static bool has_modified_stack_frame(struct instruction *insn, struct insn_state *state)
static bool has_valid_stack_frame(struct insn_state *state)
static void init_insn_state(struct objtool_file *file, struct insn_state *state,
struct insn_state *state)
struct insn_state prev_state __maybe_unused = *state;
struct insn_state *state)
struct insn_state *state)
static int validate_return(struct symbol *func, struct instruction *insn, struct insn_state *state)
struct instruction *insn, struct insn_state state);
struct instruction *insn, struct insn_state *state);
struct instruction *insn, struct insn_state *statep,
struct instruction *insn, struct insn_state *state)
struct instruction *insn, struct insn_state state)
struct insn_state *state)
struct insn_state state;
struct symbol *sym, struct insn_state *state)
struct insn_state state;
void trace_insn_state(struct instruction *insn, struct insn_state *sprev,
struct insn_state *snext);
void trace_insn_state(struct instruction *insn, struct insn_state *sprev,
struct insn_state *snext)
if (!memcmp(sprev, snext, sizeof(struct insn_state)))