On Mon, 25 Apr 2016 16:08:28 +0530 Ravi Bangoria <ravi.bango...@linux.vnet.ibm.com> wrote:
> Perf is not able to register probe in kernel module when dwarf supprt > is not there(and so it goes for symtab). Perf passes full path of > module where only module name is required which is causing the problem. > This patch fixes this issue. > > Before applying patch: > > $ dpkg -s libdw-dev > dpkg-query: package 'libdw-dev' is not installed ... > > $ ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show > Added new event: > probe:foo_show (on foo_show in > /linux/samples/kobject/kobject-example.ko) > > You can now use it in all perf tools, such as: > > perf record -e probe:foo_show -aR sleep 1 > > $ cat /sys/kernel/debug/tracing/kprobe_events > p:probe/foo_show /linux/samples/kobject/kobject-example.ko:foo_show > > After applying patch: > > $ ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show > Added new event: > probe:foo_show (on foo_show in kobject_example) > > You can now use it in all perf tools, such as: > > perf record -e probe:foo_show -aR sleep 1 > > $ cat /sys/kernel/debug/tracing/kprobe_events > p:probe/foo_show kobject_example:foo_show > Looks good to me :) However, it seems that this patch depends on your previous patch ("perf probe: Fix offline module name missmatch issue") In that case, could you make these a series of patches? Acked-by: Masami Hiramatsu <mhira...@kernel.org> Thanks, > Signed-off-by: Ravi Bangoria <ravi.bango...@linux.vnet.ibm.com> > --- > tools/perf/util/probe-event.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c > index 05d0905..54e6a5a 100644 > --- a/tools/perf/util/probe-event.c > +++ b/tools/perf/util/probe-event.c > @@ -2566,6 +2566,7 @@ static int find_probe_trace_events_from_map(struct > perf_probe_event *pev, > struct probe_trace_point *tp; > int num_matched_functions; > int ret, i, j, skipped = 0; > + char *mod_name; > > map = get_target_map(pev->target, pev->uprobes); > if (!map) { > @@ -2650,9 +2651,19 @@ static int find_probe_trace_events_from_map(struct > perf_probe_event *pev, > tp->realname = strdup_or_goto(sym->name, nomem_out); > > tp->retprobe = pp->retprobe; > - if (pev->target) > - tev->point.module = strdup_or_goto(pev->target, > - nomem_out); > + if (pev->target) { > + if (pev->uprobes) { > + tev->point.module = strdup_or_goto(pev->target, > + nomem_out); > + } else { > + mod_name = find_module_name(pev->target); > + tev->point.module = > + strdup(mod_name ? mod_name : > pev->target); > + free(mod_name); > + if (!tev->point.module) > + goto nomem_out; > + } > + } > tev->uprobes = pev->uprobes; > tev->nargs = pev->nargs; > if (tev->nargs) { > -- > 2.1.4 > -- Masami Hiramatsu <mhira...@kernel.org>