diff options
Diffstat (limited to 'tools/objtool/arch/x86/decode.c')
| -rw-r--r-- | tools/objtool/arch/x86/decode.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c index 0f22768c0d4d..34a579f806e3 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -284,11 +284,16 @@ int arch_decode_instruction(struct elf *elf, struct section *sec,  	case 0x8d:  		if (sib == 0x24 && rex_w && !rex_b && !rex_x) { -			/* lea disp(%rsp), reg */  			*type = INSN_STACK; -			op->src.type = OP_SRC_ADD; +			if (!insn.displacement.value) { +				/* lea (%rsp), reg */ +				op->src.type = OP_SRC_REG; +			} else { +				/* lea disp(%rsp), reg */ +				op->src.type = OP_SRC_ADD; +				op->src.offset = insn.displacement.value; +			}  			op->src.reg = CFI_SP; -			op->src.offset = insn.displacement.value;  			op->dest.type = OP_DEST_REG;  			op->dest.reg = op_to_cfi_reg[modrm_reg][rex_r]; | 
