Subject: Re: linux-next: build warnings after merge of the tip tree

From: Masami Hiramatsu <[email-masked]>
Date: Wed, 23 Mar 2022 15:28:40 +0900

On Tue, 22 Mar 2022 22:42:36 -0400
Steven Rostedt <[email-masked]> wrote:

> On Wed, 23 Mar 2022 11:23:23 +0900
> Masami Hiramatsu <[email-masked]> wrote:
> 
> > I see the __fexit__ is needed, but why __ftail__ is needed? I guess because
> > func_B is notrace, in that case the __fexit__ will not be in the func_B.
> > Am I correct?
> 
> I believe Peter and I agreed that the "best" solution so far, that has the
> least amount of regressions (doesn't remove anything currently being
> function graph traced, nor removes current tail calls) is:
> 
> > At that point giving us something like:
> > 
> > 1:
> > 	pushsection __ftail_loc
> > 	.long	1b - .
> > 	popsection
> > 
> > 	jmp.d32	func_B
> > 	call	__fexit__
> > 	ret
> 
> 
> Functions with a tail call will not have a __fexit__ and we can not rely on
> the function that is the tail call to do the __fexit__ for the parent
> function. Thus, the compromise is to add a label where the jmp to the
> tail-call function is, and when we want to trace the return of that
> function, we first have to patch the jmp into a call, which will then
> return back to the call to __fexit__.

Got it. So the tail call "jump" will be replaced with a normal call when
we trace it.

That's a good idea :) 

> -- Steve

-- 
Masami Hiramatsu <[email-masked]>