Re: [RFC PATCH v2 11/20] objtool: Flesh out warning related to pv_ops[] calls

Peter Zijlstra
2023-08-01T18:13:06Z

On Tue, Aug 01, 2023 at 11:06:36AM -0500, Josh Poimboeuf wrote:
> 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

Sure, that all would work I suppose.