On Wed, Feb 19, 2025 at 09:50:14PM +0530, Sathvika Vasireddy wrote: > 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
If I understand correctly, this is basically a fake call which is used to get the value of the program counter? > 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> This should have a Fixes tag as well. > 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; > + This won't work on x86, where an intra-function call is converted to a stack-modifying JUMP. So this should probably be checked in an arch-specific function. -- Josh