On Wed, 12 Apr 2017 16:28:25 +0530 "Naveen N. Rao" <naveen.n....@linux.vnet.ibm.com> wrote:
> commit 239aeba76409 ("perf powerpc: Fix kprobe and kretprobe handling > with kallsyms on ppc64le") changed how we use the offset field in struct > kprobe on ABIv2. perf now offsets from the GEP (Global entry point) if an > offset is specified and otherwise chooses the LEP (Local entry point). > > Fix the same in kernel for kprobe API users. We do this by extending > kprobe_lookup_name() to accept an additional parameter to indicate the > offset specified with the kprobe registration. If offset is 0, we return > the local function entry and return the global entry point otherwise. > > With: > # cd /sys/kernel/debug/tracing/ > # echo "p _do_fork" >> kprobe_events > # echo "p _do_fork+0x10" >> kprobe_events > > before this patch: > # cat ../kprobes/list > c0000000000d0748 k _do_fork+0x8 [DISABLED] > c0000000000d0758 k _do_fork+0x18 [DISABLED] > c0000000000412b0 k kretprobe_trampoline+0x0 [OPTIMIZED] > > and after: > # cat ../kprobes/list > c0000000000d04c8 k _do_fork+0x8 [DISABLED] > c0000000000d04d0 k _do_fork+0x10 [DISABLED] > c0000000000412b0 k kretprobe_trampoline+0x0 [OPTIMIZED] > > Acked-by: Ananth N Mavinakayanahalli <ana...@linux.vnet.ibm.com> > Signed-off-by: Naveen N. Rao <naveen.n....@linux.vnet.ibm.com> > --- > arch/powerpc/kernel/kprobes.c | 4 ++-- > arch/powerpc/kernel/optprobes.c | 4 ++-- > include/linux/kprobes.h | 2 +- > kernel/kprobes.c | 7 ++++--- > 4 files changed, 9 insertions(+), 8 deletions(-) > > diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c > index a7aa7394954d..0732a0291ace 100644 > --- a/arch/powerpc/kernel/kprobes.c > +++ b/arch/powerpc/kernel/kprobes.c > @@ -42,14 +42,14 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); > > struct kretprobe_blackpoint kretprobe_blacklist[] = {{NULL, NULL}}; > > -kprobe_opcode_t *kprobe_lookup_name(const char *name) > +kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset) Hmm, if we do this change, it is natural that kprobe_lookup_name() returns the address + offset. Thank you, -- Masami Hiramatsu <mhira...@kernel.org>