Messages in this thread | | | Date | Tue, 26 Apr 2016 06:29:25 +0900 | From | Masami Hiramatsu <> | Subject | Re: [RFC] perf probe: Fix module probe issue if no dwarf support |
| |
On Mon, 25 Apr 2016 16:08:28 +0530 Ravi Bangoria <ravi.bangoria@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 <mhiramat@kernel.org>
Thanks,
> Signed-off-by: Ravi Bangoria <ravi.bangoria@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 <mhiramat@kernel.org>
| |