Messages in this thread | | | Date | Thu, 29 Nov 2018 12:20:00 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH v2 4/4] x86/static_call: Add inline static call implementation for x86-64 |
| |
On Thu, 29 Nov 2018 18:15:39 +0100 Peter Zijlstra <peterz@infradead.org> wrote:
> On Thu, Nov 29, 2018 at 08:59:31AM -0800, Andy Lutomirski wrote: > > > If you make it conditional on CPL, do it for 32-bit as well, add > > comments, > > > and convince yourself that there isn’t a better solution > > (like pointing IP at a stub that retpolines to the target by reading > > the function pointer, a la the unoptimizable version), then okay, I > > guess, with only a small amount of grumbling. > > Right; so we _could_ grow the trampoline with a retpoline indirect call > and ret. It just makes the trampoline a whole lot bigger, but it could > work.
Can't we make use of the callee clobbered registers? I mean, we know that call is being made when the int3 is triggered. Then we can save the return address in one register, and the jump location in another, and then just call a trampoline that does:
r8 = return address r9 = function to call
push r8 jmp *r9
Then have the regs->ip point to that trampoline.
-- Steve
| |