]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
objtool: Fix Clang jump table detection
authorJosh Poimboeuf <jpoimboe@kernel.org>
Mon, 9 Mar 2026 16:03:05 +0000 (09:03 -0700)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Mon, 16 Mar 2026 22:31:25 +0000 (15:31 -0700)
With Clang, there can be a conditional forward jump between the load of
the jump table address and the indirect branch.

Fixes the following warning:

  vmlinux.o: warning: objtool: ___bpf_prog_run+0x1c5: sibling call from callable instruction with modified stack frame

Reported-by: Arnd Bergmann <arnd@arndb.de>
Closes: https://lore.kernel.org/a426d669-58bb-4be1-9eaa-6f3d83109e2d@app.fastmail.com
Link: https://patch.msgid.link/7d8600caed08901b6679767488acd639f6df9688.1773071992.git.jpoimboe@kernel.org
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
tools/objtool/check.c

index 91b3ff4803cf2773c21b89ed9be52d77118e7b47..b6765e8765074d54b118e4731b6879cb34df26e4 100644 (file)
@@ -2184,12 +2184,11 @@ static void mark_func_jump_tables(struct objtool_file *file,
                        last = insn;
 
                /*
-                * Store back-pointers for unconditional forward jumps such
+                * Store back-pointers for forward jumps such
                 * that find_jump_table() can back-track using those and
                 * avoid some potentially confusing code.
                 */
-               if (insn->type == INSN_JUMP_UNCONDITIONAL && insn->jump_dest &&
-                   insn->offset > last->offset &&
+               if (insn->jump_dest &&
                    insn->jump_dest->offset > insn->offset &&
                    !insn->jump_dest->first_jump_src) {