Messages in this thread | | | Date | Thu, 9 May 2019 11:27:38 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH 2/4] x86/kprobes: Fix frame pointer annotations |
| |
On Thu, May 09, 2019 at 10:14:31AM +0200, Peter Zijlstra wrote: > struct ftrace_regs_stack { > ftrace_func_t func; > unsigned long parent_ip; > }; > > void ftrace_regs_handler(struct pr_regs *regs) > { > struct ftrace_regs_stack *st = (void *)regs->sp; > ftrace_func_t func = st->func; > > regs->sp += sizeof(long); /* pop func */ > > func(regs->ip, st->parent_ip, function_trace_op, regs); > }
Alternatively we can add things like:
static inline unsigned long int3_emulate_pop(struct pt_regs *regs) { unsigned long val = *(unsigned long *)regs->sp; regs->sp += sizeof(unsigned long); return val; }
And do:
ftrace_func_t func = (void *)int3_emulate_pop(regs);
| |