On Wed, Sep 07, 2022 at 09:06:45AM +0200, Peter Zijlstra wrote: > On Wed, Sep 07, 2022 at 09:55:21AM +0900, Masami Hiramatsu (Google) wrote: > > > +/* Return the jump target address or 0 */ > > +static inline unsigned long insn_get_branch_addr(struct insn *insn) > > +{ > > + switch (insn->opcode.bytes[0]) { > > + case 0xe0: /* loopne */ > > + case 0xe1: /* loope */ > > + case 0xe2: /* loop */ > > Oh cute, objtool doesn't know about those, let me go add them. --- Subject: objtool,x86: Teach decode about LOOP* instructions With kprobes also needing to follow control flow; it was found that objtool is missing the branches from the LOOP* instructions. Reported-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> --- tools/objtool/arch/x86/decode.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c index c260006106be..1c253b4b7ce0 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -635,6 +635,12 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec *type = INSN_CONTEXT_SWITCH; break; + case 0xe0: /* loopne */ + case 0xe1: /* loope */ + case 0xe2: /* loop */ + *type = INSN_JUMP_CONDITIONAL; + break; + case 0xe8: *type = INSN_CALL; /*