linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Franck Bui-Huu <vagabon.xyz@gmail.com>
To: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	linux-perf-users@vger.kernel.org
Subject: Re: perf-probe: issue with latest fedora kernel
Date: Thu, 23 Dec 2010 14:59:38 +0100	[thread overview]
Message-ID: <m37hf08u9h.fsf@gmail.com> (raw)
In-Reply-To: <4D0882E7.8090805@hitachi.com> (Masami Hiramatsu's message of "Wed, 15 Dec 2010 17:57:11 +0900")

Hello Masami,

Masami Hiramatsu <masami.hiramatsu.pt@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:
>> 
>> [root@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	
>> [root@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

  parent reply	other threads:[~2010-12-23 13:59 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-09 15:00 perf-probe: issue with latest fedora kernel Francis Moreau
2010-12-09 15:35 ` Arnaldo Carvalho de Melo
2010-12-09 16:34   ` Francis Moreau
2010-12-10  3:27     ` Masami Hiramatsu
2010-12-10  7:53       ` Franck Bui-Huu
2010-12-10  8:26         ` Masami Hiramatsu
2010-12-10 13:00           ` Franck Bui-Huu
2010-12-10 13:06             ` [PATCH 1/2] perf-probe: do use the kernel image path given by 'k' option Franck Bui-Huu
2010-12-10 13:07             ` [PATCH 2/2] perf-probe: fail if the kernel image contains no symbol Franck Bui-Huu
2010-12-10  7:30   ` perf-probe: issue with latest fedora kernel Franck Bui-Huu
2010-12-12 14:08     ` Arnaldo Carvalho de Melo
2010-12-12 22:15       ` Franck Bui-Huu
2010-12-13 16:40         ` Arnaldo Carvalho de Melo
2010-12-13 10:02   ` Francis Moreau
2010-12-13 12:58     ` Arnaldo Carvalho de Melo
2010-12-13 13:08       ` Francis Moreau
2010-12-13 14:04         ` Masami Hiramatsu
2010-12-13 14:16           ` Francis Moreau
2010-12-13 19:08             ` Francis Moreau
2010-12-13 14:25           ` Arnaldo Carvalho de Melo
2010-12-13 14:21         ` Arnaldo Carvalho de Melo
2010-12-13 15:11           ` Francis Moreau
2010-12-13 16:40             ` Arnaldo Carvalho de Melo
2010-12-13 19:08               ` Francis Moreau
2010-12-13 19:17                 ` Arnaldo Carvalho de Melo
2010-12-13 19:32                   ` Francis Moreau
2010-12-15  8:57           ` Masami Hiramatsu
2010-12-15 18:53             ` Arnaldo Carvalho de Melo
2010-12-23 13:59             ` Franck Bui-Huu [this message]
2010-12-27 20:50               ` Franck Bui-Huu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m37hf08u9h.fsf@gmail.com \
    --to=vagabon.xyz@gmail.com \
    --cc=acme@ghostprotocols.net \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).