Architectures like PowerPC use a pattern where the compiler generates a branch-and-link (bl) instruction that targets the very next instruction, followed by loading the link register (mflr) later. This pattern appears in the code like:
bl .+4 li r5,0 mflr r30 Objtool currently warns about this as an "unannotated intra-function call" because find_call_destination() fails to find any symbol at the target offset. Add a check to skip the warning when a branch targets the immediate next instruction in the same function. Reported-by: kernel test robot <l...@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202502180818.xnfdv8i8-...@intel.com/ Signed-off-by: Sathvika Vasireddy <s...@linux.ibm.com> --- tools/objtool/check.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 753dbc4f8198..3f7cf2c917b5 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -1613,6 +1613,7 @@ static struct symbol *find_call_destination(struct section *sec, unsigned long o */ static int add_call_destinations(struct objtool_file *file) { + struct instruction *next_insn; struct instruction *insn; unsigned long dest_off; struct symbol *dest; @@ -1625,6 +1626,11 @@ static int add_call_destinations(struct objtool_file *file) reloc = insn_reloc(file, insn); if (!reloc) { dest_off = arch_jump_destination(insn); + + next_insn = next_insn_same_func(file, insn); + if (next_insn && dest_off == next_insn->offset) + continue; + dest = find_call_destination(insn->sec, dest_off); add_call_dest(file, insn, dest, false); -- 2.39.3