aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kprobes.h
diff options
context:
space:
mode:
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>2017-04-19 08:51:01 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2017-04-20 09:18:55 -0400
commit290e3070762ac80e5fc4087d8c4de7e3f1d90aca (patch)
treec09a1a2111a7db3fa59b077aef7e18f931cdf73d /include/linux/kprobes.h
parent49e0b4658fe6aab5bf6bfe0738a86c1895930ad1 (diff)
powerpc/kprobes: Fix handling of function offsets on ABIv2
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 global entry point if an offset is specified and otherwise chooses the 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 <ananth@linux.vnet.ibm.com> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'include/linux/kprobes.h')
-rw-r--r--include/linux/kprobes.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index 16f153c84646..1f82a3db00b1 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -379,7 +379,7 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void)
379 return this_cpu_ptr(&kprobe_ctlblk); 379 return this_cpu_ptr(&kprobe_ctlblk);
380} 380}
381 381
382kprobe_opcode_t *kprobe_lookup_name(const char *name); 382kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset);
383int register_kprobe(struct kprobe *p); 383int register_kprobe(struct kprobe *p);
384void unregister_kprobe(struct kprobe *p); 384void unregister_kprobe(struct kprobe *p);
385int register_kprobes(struct kprobe **kps, int num); 385int register_kprobes(struct kprobe **kps, int num);