Masami, It seems you forget this one ....
Thanks Franck Bui-Huu <vagabon....@gmail.com> writes: > Hello Masami, > > Masami Hiramatsu <masami.hiramatsu...@hitachi.com> writes: > >> (2010/12/13 23:21), Arnaldo Carvalho de Melo wrote: >> >>> There are two problems here: >>> >>> on the 'report' header, as we didn't collect "cycles", but >>> "probe:icmp_rcv" events, that is another fix that needs to be backported to >>> fedora, but a minor one. >>> >>> Also 'perf probe -L' should look use >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 as a prefix to look >>> for >>> sources. >>> >>> That can be found using: >>> >>> [r...@felicio linux-2.6.35.x86_64]# readelf -wi >>> /usr/lib/debug/lib/modules/2.6.35.9-64.fc14.x86_64/vmlinux | grep >>> DW_AT_comp_dir | head -5 >>> <2e> DW_AT_comp_dir : >>> /usr/src/debug////////kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> <95> DW_AT_comp_dir : (indirect string, offset: 0x24d0): >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> <75e8> DW_AT_comp_dir : (indirect string, offset: 0x24d0): >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> <900e> DW_AT_comp_dir : (indirect string, offset: 0x24d0): >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> <16670> DW_AT_comp_dir : (indirect string, offset: 0x24d0): >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> [r...@felicio linux-2.6.35.x86_64]# >>> >>> <0><8b>: Abbrev Number: 1 (DW_TAG_compile_unit) >>> <8c> DW_AT_producer : (indirect string, offset: 0x22f4): GNU C >>> 4.5.1 20100924 (Red Hat 4.5.1-4) >>> <90> DW_AT_language : 1 (ANSI C) >>> <91> DW_AT_name : (indirect string, offset: 0x37a): >>> arch/x86/kernel/head64.c >>> <95> DW_AT_comp_dir : (indirect string, offset: 0x24d0): >>> /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64 >>> <99> DW_AT_low_pc : 0x0 >>> <a1> DW_AT_entry_pc : 0x0 >>> <a9> DW_AT_ranges : 0x340 >>> <ad> DW_AT_stmt_list : 0x114 >>> >>> I.e. using the DW_AT_comp_dir attribute in the DW_TAG_compile_unit DWARF >>> tags, >>> Masami? >> >> It already supports DW_AT_comp_dir on upstream kernel, >> see find_line_range() in utils/probe-finder.c ;-) >> > > It looks like adding probe with lazy matching pattern does not: > > $ cd /dev > $ perf probe -n -a "icmp.c;sk=*" > Failed to open net/ipv4/icmp.c: Operation not permitted > Error: Failed to add events. (-2) > $ cd /usr/src/debug/kernel-2.6.35.fc14/linux-2.6.35.x86_64/ > $ perf probe -n -a "icmp.c;sk=*" > Add new events: > probe:icmp_push_reply (on @cmp.c) > probe:icmp_reply (on @cmp.c) > probe:icmp_reply_1 (on @cmp.c) > probe:icmp_send (on @cmp.c) > probe:icmp_send_1 (on @cmp.c) > probe:icmp_error (on @cmp.c) > probe:icmp_error_1 (on @cmp.c) > probe:icmp_error_2 (on @cmp.c) > probe:icmp_error_3 (on @cmp.c) > > You can now use it on all perf tools, such as: > > perf record -e probe:icmp_error_3 -aR sleep 1 > > Below is a quick and dirty fix (sorry, I don't have any time to make it > better for now), also note that the note of the file (icmp.c) reported > is screwed... > > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c > index 10ad1ad..53c2f97 100644 > --- a/tools/perf/util/probe-event.c > +++ b/tools/perf/util/probe-event.c > @@ -241,7 +241,7 @@ static int try_to_find_probe_trace_events(struct > perf_probe_event *pev, > * a newly allocated path on success. > * Return 0 if file was found and readable, -errno otherwise. > */ > -static int get_real_path(const char *raw_path, const char *comp_dir, > +int get_real_path(const char *raw_path, const char *comp_dir, > char **new_path) > { > const char *prefix = symbol_conf.source_prefix; > diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c > index 3991d73..88829ef 100644 > --- a/tools/perf/util/probe-finder.c > +++ b/tools/perf/util/probe-finder.c > @@ -1126,9 +1126,17 @@ static int find_probe_point_lazy(Dwarf_Die *sp_die, > struct probe_finder *pf) > int ret = 0; > > if (list_empty(&pf->lcache)) { > + const char *comp_dir = cu_get_comp_dir(&pf->cu_die); > + char *fullpath; > + > + ret = get_real_path(pf->fname, comp_dir, &fullpath); > + if (ret < 0) > + return ret; > + > /* Matching lazy line pattern */ > - ret = find_lazy_match_lines(&pf->lcache, pf->fname, > + ret = find_lazy_match_lines(&pf->lcache, fullpath, > pf->pev->point.lazy_line); > + free(fullpath); > if (ret == 0) { > pr_debug("No matched lines found in %s.\n", pf->fname); > return 0; > diff --git a/tools/perf/util/probe-finder.h b/tools/perf/util/probe-finder.h > index bba69d4..665938a 100644 > --- a/tools/perf/util/probe-finder.h > +++ b/tools/perf/util/probe-finder.h > @@ -15,6 +15,9 @@ static inline int is_c_varname(const char *name) > return isalpha(name[0]) || name[0] == '_'; > } > > +extern int get_real_path(const char *raw_path, const char *comp_dir, > + char **new_path); > + > #ifdef DWARF_SUPPORT > /* Find probe_trace_events specified by perf_probe_event from debuginfo */ > extern int find_probe_trace_events(int fd, struct perf_probe_event *pev, -- Franck -- To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html