On Mon, Jul 31, 2023 at 11:46:12PM +0200, Peter Zijlstra wrote:
Ideally it would only print a single warning for this case, something like:
vmlinux.o: warning: objtool: __flush_tlb_all_noinstr+0x4: indirect call to native_flush_tlb_local() leaves .noinstr.text section
But then what for the case where there are multiple implementations and more than one isn't noinstr?
The warning would be in the loop in pv_call_dest(), so it would potentially print multiple warnings, one for each potential dest.
IIRC that is where these double prints came from. One is the callsite (always one) and the second is the offending implementation (but there could be more).
It's confusing to warn about the call site and the destination in two separate warnings. That's why I'm proposing combining them into a single warning (which still could end up as multiple warnings if there are multiple affected dests).
I left out "pv_ops[1]" because it's already long enough :-)
The index number is useful when also looking at the assembler, which IIRC is an indexed indirect call.
Ok, so something like so?
vmlinux.o: warning: objtool: __flush_tlb_all_noinstr+0x4: indirect call to pv_ops[1] (native_flush_tlb_local) leaves .noinstr.text section