From b09fb65e863733e192d4825a285b4b4998969ce0 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Fri, 24 Apr 2020 16:18:58 +0200 Subject: [PATCH] objtool: Remove INSN_STACK With the unconditional use of handle_insn_ops(), INSN_STACK has lost its purpose. Remove it. Suggested-by: Julien Thierry Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Miroslav Benes Acked-by: Josh Poimboeuf Link: https://lkml.kernel.org/r/20200428191659.854203028@infradead.org --- tools/objtool/arch.h | 1 - tools/objtool/arch/x86/decode.c | 23 ----------------------- tools/objtool/check.c | 3 --- 3 files changed, 27 deletions(-) diff --git a/tools/objtool/arch.h b/tools/objtool/arch.h index 445b8fa..25dd4a9 100644 --- a/tools/objtool/arch.h +++ b/tools/objtool/arch.h @@ -21,7 +21,6 @@ enum insn_type { INSN_RETURN, INSN_EXCEPTION_RETURN, INSN_CONTEXT_SWITCH, - INSN_STACK, INSN_BUG, INSN_NOP, INSN_STAC, diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c index 97e66c7..e26bedb 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -141,7 +141,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, if (rex_w && !rex_b && modrm_mod == 3 && modrm_rm == 4) { /* add/sub reg, %rsp */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_ADD; op->src.reg = op_to_cfi_reg[modrm_reg][rex_r]; @@ -154,7 +153,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x50 ... 0x57: /* push reg */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG; op->src.reg = op_to_cfi_reg[op1 & 0x7][rex_b]; @@ -166,7 +164,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x58 ... 0x5f: /* pop reg */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_POP; op->dest.type = OP_DEST_REG; @@ -178,7 +175,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x68: case 0x6a: /* push immediate */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_CONST; op->dest.type = OP_DEST_PUSH; @@ -196,7 +192,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, if (modrm == 0xe4) { /* and imm, %rsp */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_AND; op->src.reg = CFI_SP; @@ -215,7 +210,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, break; /* add/sub imm, %rsp */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_ADD; op->src.reg = CFI_SP; @@ -229,7 +223,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, if (rex_w && !rex_r && modrm_mod == 3 && modrm_reg == 4) { /* mov %rsp, reg */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG; op->src.reg = CFI_SP; @@ -242,7 +235,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, if (rex_w && !rex_b && modrm_mod == 3 && modrm_rm == 4) { /* mov reg, %rsp */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG; op->src.reg = op_to_cfi_reg[modrm_reg][rex_r]; @@ -258,7 +250,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, (modrm_mod == 1 || modrm_mod == 2) && modrm_rm == 5) { /* mov reg, disp(%rbp) */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG; op->src.reg = op_to_cfi_reg[modrm_reg][rex_r]; @@ -270,7 +261,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, } else if (rex_w && !rex_b && modrm_rm == 4 && sib == 0x24) { /* mov reg, disp(%rsp) */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG; op->src.reg = op_to_cfi_reg[modrm_reg][rex_r]; @@ -286,7 +276,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, if (rex_w && !rex_b && modrm_mod == 1 && modrm_rm == 5) { /* mov disp(%rbp), reg */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG_INDIRECT; op->src.reg = CFI_BP; @@ -299,7 +288,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, modrm_mod != 3 && modrm_rm == 4) { /* mov disp(%rsp), reg */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_REG_INDIRECT; op->src.reg = CFI_SP; @@ -314,7 +302,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x8d: if (sib == 0x24 && rex_w && !rex_b && !rex_x) { - *type = INSN_STACK; ADD_OP(op) { if (!insn.displacement.value) { /* lea (%rsp), reg */ @@ -332,7 +319,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, } else if (rex == 0x48 && modrm == 0x65) { /* lea disp(%rbp), %rsp */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_ADD; op->src.reg = CFI_BP; @@ -350,7 +336,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, * Restoring rsp back to its original value after a * stack realignment. */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_ADD; op->src.reg = CFI_R10; @@ -368,7 +353,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, * Restoring rsp back to its original value after a * stack realignment. */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_ADD; op->src.reg = CFI_R13; @@ -382,7 +366,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x8f: /* pop to mem */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_POP; op->dest.type = OP_DEST_MEM; @@ -395,7 +378,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x9c: /* pushf */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_CONST; op->dest.type = OP_DEST_PUSHF; @@ -404,7 +386,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, case 0x9d: /* popf */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_POPF; op->dest.type = OP_DEST_MEM; @@ -443,7 +424,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, } else if (op2 == 0xa0 || op2 == 0xa8) { /* push fs/gs */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_CONST; op->dest.type = OP_DEST_PUSH; @@ -452,7 +432,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, } else if (op2 == 0xa1 || op2 == 0xa9) { /* pop fs/gs */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_POP; op->dest.type = OP_DEST_MEM; @@ -469,7 +448,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, * mov bp, sp * pop bp */ - *type = INSN_STACK; ADD_OP(op) op->dest.type = OP_DEST_LEAVE; @@ -537,7 +515,6 @@ int arch_decode_instruction(const struct elf *elf, const struct section *sec, else if (modrm_reg == 6) { /* push from mem */ - *type = INSN_STACK; ADD_OP(op) { op->src.type = OP_SRC_CONST; op->dest.type = OP_DEST_PUSH; diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 6591c2dd..4f3db2f 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -2339,9 +2339,6 @@ static int validate_branch(struct objtool_file *file, struct symbol *func, } return 0; - case INSN_STACK: - break; - case INSN_STAC: if (state.uaccess) { WARN_FUNC("recursive UACCESS enable", sec, insn->offset); -- 2.7.4