Re: [PATCH 4/7] objtool: Add support for return trampoline call

From: Peter Zijlstra
Date: Mon Apr 06 2020 - 05:41:40 EST


On Mon, Apr 06, 2020 at 10:19:56AM +0200, Alexandre Chartre wrote:
>
> On 4/4/20 5:51 PM, Peter Zijlstra wrote:
> > On Sat, Apr 04, 2020 at 09:22:32AM -0500, Josh Poimboeuf wrote:
> > > On Sat, Apr 04, 2020 at 03:32:18PM +0200, Peter Zijlstra wrote:
> > > > On Fri, Apr 03, 2020 at 05:46:20PM +0200, Peter Zijlstra wrote:
> > > > > On Fri, Apr 03, 2020 at 10:17:57AM -0500, Josh Poimboeuf wrote:
> > > > > > Peter, I think my previous idea for UNWIND_HINT_ADJUST stack_add=8 would
> > > > > > work here?
> > > > >
> > > > > Yes, it would.
> > > >
> > > > Sorry, I have reconsidered. While it will shut up objtool, it will not
> > > > 'work'. That is, the ORC data generated will not correctly unwind.
> > > >
> > > > I'll try and write a longer email tonight.
> > >
> > > Right, that's what I've been trying to say. The ORC data will be
> > > non-deterministic unless we unroll the loop. Or did you mean something
> > > else?
> >
> > The below should result in deterministic code.
> >
> > diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
> > index 07e95dcb40ad..109ee65f4a11 100644
> > --- a/arch/x86/include/asm/nospec-branch.h
> > +++ b/arch/x86/include/asm/nospec-branch.h
> > @@ -59,8 +59,8 @@
> > jmp 775b; \
> > 774: \
> > dec reg; \
> > - jnz 771b; \
> > - add $(BITS_PER_LONG/8) * nr, sp;
> > + add $(BITS_PER_LONG/8) * $2, sp; \
> > + jnz 771b;
> > #ifdef __ASSEMBLY__
>
> Nice. This works fine and allows to remove ANNOTATE_NOSPEC_ALTERNATIVE when
> using __FILL_RETURN_BUFFER. However this is probably less performant because
> we now have nr/2 add instructions instead of just 1.

Does it actually matter though? That is, can you measure the difference?