Messages in this thread | | | Date | Fri, 3 Apr 2020 10:32:25 -0500 | From | Josh Poimboeuf <> | Subject | Re: [PATCH 4/7] objtool: Add support for return trampoline call |
| |
On Fri, Apr 03, 2020 at 10:22:14AM -0500, Josh Poimboeuf wrote: > On Fri, Apr 03, 2020 at 10:17:57AM -0500, Josh Poimboeuf wrote: > > On Fri, Apr 03, 2020 at 09:11:55AM +0100, Julien Thierry wrote: > > > > > > > > > On 4/2/20 4:40 PM, Peter Zijlstra wrote: > > > > On Thu, Apr 02, 2020 at 04:31:05PM +0100, Julien Thierry wrote: > > > > > My understanding is that once you find an intra-function call, either you > > > > > hit a return, ending the branch, so the return should undo the modification > > > > > the intra-function call did (whether is it a retpoline return or not). > > > > > Otherwise, the intra-function call branch will need to reach an end in some > > > > > way (e.g. hitting a CONTEXT_SWITCH instruction, calling a > > > > > dead_end_function). > > > > > > > > > > Am I missing something? > > > > > > > > The thing is basically doing: > > > > > > > > mov $n, cx > > > > 1: call 2f > > > > 2: dec cx > > > > jnz 1b > > > > add 8*n, sp > > > > > > > > So it does N calls to self, then subtracts N words from the stack. > > > > > > > > The reason being that the CPU has a return-stack-buffer for predicting > > > > returns, and call/ret being naturally paired, that works. The above > > > > is a software flush of the RSB. > > > > > > > > > > Ah, lovely... Maybe that's where SAVE/RESTORE unwind hints could be nice ;) > > > . > > > > > > Otherwise, I don't really have a good suggestion for this... > > > > Peter, I think my previous idea for UNWIND_HINT_ADJUST stack_add=8 would > > work here? > > And if we're going to need that hint anyway, maybe we could get rid of > the nasty arch_exception_frame_size for the IRET thing and just use a > hint there after all ;-)
Actually, never mind -- I guess it wouldn't work because of inconsistent stack states and all that...
-- Josh
| |