All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
@ 2015-04-13 11:41 He Kuang
  2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
                   ` (4 more replies)
  0 siblings, 5 replies; 19+ messages in thread
From: He Kuang @ 2015-04-13 11:41 UTC (permalink / raw)
  To: masami.hiramatsu.pt, acme, a.p.zijlstra, mingo, namhyung
  Cc: wangnan0, linux-kernel

Perf probe misses to set retprobe flag back when falling back to
address-based alternative mode.

Can be reproduced as following:

  $ perf probe -v -k vmlinux --add='sys_write%return'
  ...
  Added new event:
  Writing event: p:probe/sys_write _stext+1584952
    probe:sys_write      (on sys_write%return)

  $ cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/sys_write _stext+1584952

After this patch:

  $ perf probe -v -k vmlinux --add='sys_write%return'
  Added new event:
  Writing event: r:probe/sys_write SyS_write+0
    probe:sys_write      (on sys_write%return)

  $ cat /sys/kernel/debug/tracing/kprobe_events
  r:probe/sys_write SyS_write

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/probe-event.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 30545ce..5483d98 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
 	else {
 		result->offset += pp->offset;
 		result->line += pp->line;
+		result->retprobe = pp->retprobe;
 		ret = 0;
 	}
 
-- 
2.3.3.220.g9ab698f


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
@ 2015-04-13 11:41 ` He Kuang
  2015-04-13 15:41   ` Masami Hiramatsu
  2015-04-13 20:56   ` Arnaldo Carvalho de Melo
  2015-04-13 11:41 ` [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file He Kuang
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 19+ messages in thread
From: He Kuang @ 2015-04-13 11:41 UTC (permalink / raw)
  To: masami.hiramatsu.pt, acme, a.p.zijlstra, mingo, namhyung
  Cc: wangnan0, linux-kernel

Use get_real_path() to enable --source option when probe with lazy_line
pattern.

Before this patch:

  $ perf probe -s ./kernel_src/ -k ./vmlinux --add='fs/super.c;s->s_count=1;'
  Failed to open fs/super.c: No such file or directory
    Error: Failed to add events.

After this patch:

  $ perf probe -s ./kernel_src/ -k ./vmlinux  --add='fs/super.c;s->s_count=1;'
  Added new events:
    probe:_stext         (on @fs/super.c)
    probe:_stext_1       (on @fs/super.c)
  ...

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/probe-event.c  |  2 +-
 tools/perf/util/probe-event.h  |  2 ++
 tools/perf/util/probe-finder.c | 18 +++++++++++++++---
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 5483d98..35ee51a 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -661,7 +661,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-event.h b/tools/perf/util/probe-event.h
index d6b7834..21809ea 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -135,6 +135,8 @@ extern int show_available_vars(struct perf_probe_event *pevs, int npevs,
 			       struct strfilter *filter, bool externs);
 extern int show_available_funcs(const char *module, struct strfilter *filter,
 				bool user);
+extern int get_real_path(const char *raw_path, const char *comp_dir,
+			char **new_path);
 
 /* Maximum index number of event-name postfix */
 #define MAX_EVENT_INDEX	1024
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 7831e2d..431c12d 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -791,11 +791,20 @@ static int find_lazy_match_lines(struct intlist *list,
 	ssize_t len;
 	int count = 0, linenum = 1;
 	char sbuf[STRERR_BUFSIZE];
+	char *realname = NULL;
+	int ret;
 
-	fp = fopen(fname, "r");
+	ret = get_real_path(fname, NULL, &realname);
+	if (ret < 0) {
+		pr_warning("Failed to find source file %s.\n", fname);
+		return ret;
+	}
+
+	fp = fopen(realname, "r");
 	if (!fp) {
-		pr_warning("Failed to open %s: %s\n", fname,
+		pr_warning("Failed to open %s: %s\n", realname,
 			   strerror_r(errno, sbuf, sizeof(sbuf)));
+		free(realname);
 		return -errno;
 	}
 
@@ -817,7 +826,10 @@ static int find_lazy_match_lines(struct intlist *list,
 	fclose(fp);
 
 	if (count == 0)
-		pr_debug("No matched lines found in %s.\n", fname);
+		pr_debug("No matched lines found in %s.\n", realname);
+
+	free(realname);
+
 	return count;
 }
 
-- 
2.3.3.220.g9ab698f


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file
  2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
  2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
@ 2015-04-13 11:41 ` He Kuang
  2015-04-13 16:03   ` Masami Hiramatsu
  2015-04-14 12:18   ` [tip:perf/urgent] " tip-bot for He Kuang
  2015-04-13 14:39 ` [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode Arnaldo Carvalho de Melo
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 19+ messages in thread
From: He Kuang @ 2015-04-13 11:41 UTC (permalink / raw)
  To: masami.hiramatsu.pt, acme, a.p.zijlstra, mingo, namhyung
  Cc: wangnan0, linux-kernel

The first argument passed to find_probe_point_lazy() should be CU die,
which will be passed to die_walk_lines() when lazy_line
matches. Currently, when we probe with lazy_line pattern to file without
function name, NULL pointer is passed and causes a segment fault.

Can be repoduced as following:

  $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
  [ 1958.984658] perf[1020]: segfault at 10 ip 00007fc6e10d8c71 sp
  00007ffcbfaaf900 error 4 in libdw-0.161.so[7fc6e10ce000+34000]
  Segmentation fault

After this patch:

  $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
  Added new event:
  probe:_stext         (on @fs/super.c)

  You can now use it in all perf tools, such as:
    perf record -e probe:_stext -aR sleep 1

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/probe-finder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 431c12d..e91101b 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1067,7 +1067,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
 			if (pp->function)
 				ret = find_probe_point_by_func(pf);
 			else if (pp->lazy_line)
-				ret = find_probe_point_lazy(NULL, pf);
+				ret = find_probe_point_lazy(&pf->cu_die, pf);
 			else {
 				pf->lno = pp->line;
 				ret = find_probe_point_by_line(pf);
-- 
2.3.3.220.g9ab698f


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
  2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
  2015-04-13 11:41 ` [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file He Kuang
@ 2015-04-13 14:39 ` Arnaldo Carvalho de Melo
  2015-04-13 14:42   ` Arnaldo Carvalho de Melo
  2015-04-13 15:23   ` He Kuang
  2015-04-13 15:42 ` Masami Hiramatsu
  2015-04-14 12:17 ` [tip:perf/urgent] " tip-bot for He Kuang
  4 siblings, 2 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 14:39 UTC (permalink / raw)
  To: He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
> Perf probe misses to set retprobe flag back when falling back to
> address-based alternative mode.

And when is that happens, can you explain? Because I tried to follow your
instructions, but in my case it worked in the same way before and after your
patch.

Can you please provide more context for reviewing your patch?

Here are my results:

Before:

  [root@ssdandy ~]# perf probe -v --add='sys_write%return'
  probe-definition(0): sys_write%return
  symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
  0 arguments
  Using /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda for symbols
  Could not open debuginfo. Try to use symbols.
  Opening /sys/kernel/debug/tracing/kprobe_events write=1
  Added new event:
  Writing event: r:probe/sys_write sys_write+0
      probe:sys_write      (on sys_write%return)

  You can now use it in all perf tools, such as:

	  perf record -e probe:sys_write -aR sleep 1
  [root@ssdandy ~]# cat /sys/kernel/debug/tracing/kprobe_events
  r:probe/sys_write sys_write

Remove it:

  [root@ssdandy ~]# perf probe --del *:*
  Removed event: probe:sys_write

After:

  [root@ssdandy ~]# perf probe -v --add='sys_write%return'
  probe-definition(0): sys_write%return
  symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
  0 arguments
  Using /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda for symbols
  Could not open debuginfo. Try to use symbols.
  Opening /sys/kernel/debug/tracing/kprobe_events write=1
  Added new event:
  Writing event: r:probe/sys_write sys_write+0
    probe:sys_write      (on sys_write%return)
  
  You can now use it in all perf tools, such as:

	  perf record -e probe:sys_write -aR sleep 1

  [root@ssdandy ~]# 
  [root@ssdandy ~]# cat /sys/kernel/debug/tracing/kprobe_events
  r:probe/sys_write sys_write

Humm, noticed one other problem, but not with your patch, about this message:

"Could not open debuginfo. Try to use symbols."

That is really not clear, specially that "try to use symbols" :-)

[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda
lrwxrwxrwx. 1 root root 86 Apr 10 18:02 /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda -> ../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda 
-rwxr-xr-x. 1 root root 22698661 Apr 10 18:02 /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda

I.e. it managed to read the debuginfo, its just that it has no symbols in it :-)

Anyway, digression ended.

- Arnaldo
 
> Can be reproduced as following:
> 
>   $ perf probe -v -k vmlinux --add='sys_write%return'
>   ...
>   Added new event:
>   Writing event: p:probe/sys_write _stext+1584952
>     probe:sys_write      (on sys_write%return)
> 
>   $ cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/sys_write _stext+1584952
> 
> After this patch:
> 
>   $ perf probe -v -k vmlinux --add='sys_write%return'
>   Added new event:
>   Writing event: r:probe/sys_write SyS_write+0
>     probe:sys_write      (on sys_write%return)
> 
>   $ cat /sys/kernel/debug/tracing/kprobe_events
>   r:probe/sys_write SyS_write
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
>  tools/perf/util/probe-event.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 30545ce..5483d98 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
>  	else {
>  		result->offset += pp->offset;
>  		result->line += pp->line;
> +		result->retprobe = pp->retprobe;
>  		ret = 0;
>  	}
>  
> -- 
> 2.3.3.220.g9ab698f

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 14:39 ` [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode Arnaldo Carvalho de Melo
@ 2015-04-13 14:42   ` Arnaldo Carvalho de Melo
  2015-04-13 15:38     ` He Kuang
  2015-04-13 15:23   ` He Kuang
  1 sibling, 1 reply; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 14:42 UTC (permalink / raw)
  To: He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Em Mon, Apr 13, 2015 at 11:39:03AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
> > Perf probe misses to set retprobe flag back when falling back to
> > address-based alternative mode.
 
> Humm, noticed one other problem, but not with your patch, about this message:
 
> "Could not open debuginfo. Try to use symbols."
 
> That is really not clear, specially that "try to use symbols" :-)
 
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda
> lrwxrwxrwx. 1 root root 86 Apr 10 18:02 /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda -> ../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda 
> -rwxr-xr-x. 1 root root 22698661 Apr 10 18:02 /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
 
> I.e. it managed to read the debuginfo, its just that it has no symbols in it :-)
 
> Anyway, digression ended.

Interesting is that when testing your next patch I see:

  [root@ssdandy linux]#  perf probe -s ./kernel_src/ --add='fs/super.c;s->s_count=1;'
  The /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda file has no debug information.
  Rebuild with CONFIG_DEBUG_INFO=y, or install an appropriate debuginfo package.
    Error: Failed to add events.
  [root@ssdandy linux]# 

Much, much clear message about that debuginfo file :-)

But then, to test your [2/3] patch I'll have to figure out how to setup the
environment so that I can match your results, shouldn't be hard, but would
save reviewing time if you stated it in the commit log message.

- Arnaldo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 14:39 ` [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode Arnaldo Carvalho de Melo
  2015-04-13 14:42   ` Arnaldo Carvalho de Melo
@ 2015-04-13 15:23   ` He Kuang
  2015-04-13 16:23     ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 19+ messages in thread
From: He Kuang @ 2015-04-13 15:23 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel



On 04/13/2015 10:39 PM, Arnaldo Carvalho de Melo wrote:
> Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
>> Perf probe misses to set retprobe flag back when falling back to
>> address-based alternative mode.
>
> And when is that happens, can you explain? Because I tried to follow your
> instructions, but in my case it worked in the same way before and after your
> patch.
>
> Can you please provide more context for reviewing your patch?
>

More details:

   [root]# perf probe -v -k vmlinux --add='sys_write%return'
   probe-definition(0): sys_write%return
   symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
   0 arguments
   Use vmlinux: vmlinux
   map_groups__set_modules_path_dir: cannot open /lib/modules/4.0.0-rc6+ dir
   Problems setting modules path maps, continuing anyway...
   Using vmlinux for symbols

   Open Debuginfo file: vmlinux
   >>>==========================

   Try to find probe point from debuginfo.
   Symbol sys_write address found : ffffffff811a8cf0
   Probe point found: SyS_write+0
   Found 1 probe_trace_events.
   Opening /sys/kernel/debug/tracing/kprobe_events write=1
   Added new event:
   Writing event: p:probe/sys_write _stext+1739560
     probe:sys_write      (on sys_write%return)

   You can now use it in all perf tools, such as:

           perf record -e probe:sys_write -aR sleep 1

   [root@buildroot tmp]# cat /sys/kernel/debug/tracing/kprobe_events
   p:probe/sys_write _stext+1739560


The line I marked is different from your result, which is:
   """Could not open debuginfo. Try to use symbols."""


When perf probe searched in debuginfo and failed, it tried with 
alternative, in function get_alternative_probe_event():

         memcpy(tmp, &pev->point, sizeof(*tmp));
	memset(&pev->point, 0, sizeof(pev->point));

In this case, it drops the retprobe flag and forgets to set it back in 
find_alternative_probe_point(), so the problem occurred.



> Here are my results:
>
> Before:
>
>    [root@ssdandy ~]# perf probe -v --add='sys_write%return'
>    probe-definition(0): sys_write%return
>    symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
>    0 arguments
>    Using /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda for symbols
>    Could not open debuginfo. Try to use symbols.
>    Opening /sys/kernel/debug/tracing/kprobe_events write=1
>    Added new event:
>    Writing event: r:probe/sys_write sys_write+0
>        probe:sys_write      (on sys_write%return)
>
>    You can now use it in all perf tools, such as:
>
> 	  perf record -e probe:sys_write -aR sleep 1
>    [root@ssdandy ~]# cat /sys/kernel/debug/tracing/kprobe_events
>    r:probe/sys_write sys_write
>
> Remove it:
>
>    [root@ssdandy ~]# perf probe --del *:*
>    Removed event: probe:sys_write
>
> After:
>
>    [root@ssdandy ~]# perf probe -v --add='sys_write%return'
>    probe-definition(0): sys_write%return
>    symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
>    0 arguments
>    Using /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda for symbols
>    Could not open debuginfo. Try to use symbols.
>    Opening /sys/kernel/debug/tracing/kprobe_events write=1
>    Added new event:
>    Writing event: r:probe/sys_write sys_write+0
>      probe:sys_write      (on sys_write%return)
>
>    You can now use it in all perf tools, such as:
>
> 	  perf record -e probe:sys_write -aR sleep 1
>
>    [root@ssdandy ~]#
>    [root@ssdandy ~]# cat /sys/kernel/debug/tracing/kprobe_events
>    r:probe/sys_write sys_write
>
> Humm, noticed one other problem, but not with your patch, about this message:
>
> "Could not open debuginfo. Try to use symbols."
>
> That is really not clear, specially that "try to use symbols" :-)
>
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda
> lrwxrwxrwx. 1 root root 86 Apr 10 18:02 /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda -> ../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> -rwxr-xr-x. 1 root root 22698661 Apr 10 18:02 /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
>
> I.e. it managed to read the debuginfo, its just that it has no symbols in it :-)
>
> Anyway, digression ended.
>
> - Arnaldo
>
>> Can be reproduced as following:
>>
>>    $ perf probe -v -k vmlinux --add='sys_write%return'
>>    ...
>>    Added new event:
>>    Writing event: p:probe/sys_write _stext+1584952
>>      probe:sys_write      (on sys_write%return)
>>
>>    $ cat /sys/kernel/debug/tracing/kprobe_events
>>    p:probe/sys_write _stext+1584952
>>
>> After this patch:
>>
>>    $ perf probe -v -k vmlinux --add='sys_write%return'
>>    Added new event:
>>    Writing event: r:probe/sys_write SyS_write+0
>>      probe:sys_write      (on sys_write%return)
>>
>>    $ cat /sys/kernel/debug/tracing/kprobe_events
>>    r:probe/sys_write SyS_write
>>
>> Signed-off-by: He Kuang <hekuang@huawei.com>
>> ---
>>   tools/perf/util/probe-event.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
>> index 30545ce..5483d98 100644
>> --- a/tools/perf/util/probe-event.c
>> +++ b/tools/perf/util/probe-event.c
>> @@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
>>   	else {
>>   		result->offset += pp->offset;
>>   		result->line += pp->line;
>> +		result->retprobe = pp->retprobe;
>>   		ret = 0;
>>   	}
>>
>> --
>> 2.3.3.220.g9ab698f
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 14:42   ` Arnaldo Carvalho de Melo
@ 2015-04-13 15:38     ` He Kuang
  2015-04-13 20:42       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 19+ messages in thread
From: He Kuang @ 2015-04-13 15:38 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Hi, Arnaldo

On 04/13/2015 10:42 PM, Arnaldo Carvalho de Melo wrote:
> Em Mon, Apr 13, 2015 at 11:39:03AM -0300, Arnaldo Carvalho de Melo escreveu:
>> Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
>>> Perf probe misses to set retprobe flag back when falling back to
>>> address-based alternative mode.
>
>> Humm, noticed one other problem, but not with your patch, about this message:
>
>> "Could not open debuginfo. Try to use symbols."
>
>> That is really not clear, specially that "try to use symbols" :-)
>
>> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda
>> lrwxrwxrwx. 1 root root 86 Apr 10 18:02 /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda -> ../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
>> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
>> -rwxr-xr-x. 1 root root 22698661 Apr 10 18:02 /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
>> [root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
>
>> I.e. it managed to read the debuginfo, its just that it has no symbols in it :-)
>
>> Anyway, digression ended.
>
> Interesting is that when testing your next patch I see:
>
>    [root@ssdandy linux]#  perf probe -s ./kernel_src/ --add='fs/super.c;s->s_count=1;'
>    The /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda file has no debug information.
>    Rebuild with CONFIG_DEBUG_INFO=y, or install an appropriate debuginfo package.
>      Error: Failed to add events.
>    [root@ssdandy linux]#
>
> Much, much clear message about that debuginfo file :-)
>
> But then, to test your [2/3] patch I'll have to figure out how to setup the
> environment so that I can match your results, shouldn't be hard, but would
> save reviewing time if you stated it in the commit log message.

Sorry for not providing enough information.

-s ./kernel_src/

The kernel_src dir is a kernel source tree path, it can be
anywhere, for test you can only put fs/super.c in it:

kernel_src/
   -- fs
      -- super.c

-k vmlinux

This is necessary and should be matched to your running kernel.


>
> - Arnaldo
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
@ 2015-04-13 15:41   ` Masami Hiramatsu
  2015-04-13 16:05     ` Arnaldo Carvalho de Melo
  2015-04-13 20:56   ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 19+ messages in thread
From: Masami Hiramatsu @ 2015-04-13 15:41 UTC (permalink / raw)
  To: He Kuang; +Cc: acme, a.p.zijlstra, mingo, namhyung, wangnan0, linux-kernel

Hi,

This one should already be fixed with Naohiro's patch.

 https://lkml.org/lkml/2015/3/13/16

Arnaldo, I've already given my ack for that.

https://lkml.org/lkml/2015/3/13/298

Should I resend that?


Thank you,

(2015/04/13 20:41), He Kuang wrote:
> Use get_real_path() to enable --source option when probe with lazy_line
> pattern.
> 
> Before this patch:
> 
>   $ perf probe -s ./kernel_src/ -k ./vmlinux --add='fs/super.c;s->s_count=1;'
>   Failed to open fs/super.c: No such file or directory
>     Error: Failed to add events.
> 
> After this patch:
> 
>   $ perf probe -s ./kernel_src/ -k ./vmlinux  --add='fs/super.c;s->s_count=1;'
>   Added new events:
>     probe:_stext         (on @fs/super.c)
>     probe:_stext_1       (on @fs/super.c)
>   ...
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
>  tools/perf/util/probe-event.c  |  2 +-
>  tools/perf/util/probe-event.h  |  2 ++
>  tools/perf/util/probe-finder.c | 18 +++++++++++++++---
>  3 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 5483d98..35ee51a 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -661,7 +661,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-event.h b/tools/perf/util/probe-event.h
> index d6b7834..21809ea 100644
> --- a/tools/perf/util/probe-event.h
> +++ b/tools/perf/util/probe-event.h
> @@ -135,6 +135,8 @@ extern int show_available_vars(struct perf_probe_event *pevs, int npevs,
>  			       struct strfilter *filter, bool externs);
>  extern int show_available_funcs(const char *module, struct strfilter *filter,
>  				bool user);
> +extern int get_real_path(const char *raw_path, const char *comp_dir,
> +			char **new_path);
>  
>  /* Maximum index number of event-name postfix */
>  #define MAX_EVENT_INDEX	1024
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index 7831e2d..431c12d 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -791,11 +791,20 @@ static int find_lazy_match_lines(struct intlist *list,
>  	ssize_t len;
>  	int count = 0, linenum = 1;
>  	char sbuf[STRERR_BUFSIZE];
> +	char *realname = NULL;
> +	int ret;
>  
> -	fp = fopen(fname, "r");
> +	ret = get_real_path(fname, NULL, &realname);
> +	if (ret < 0) {
> +		pr_warning("Failed to find source file %s.\n", fname);
> +		return ret;
> +	}
> +
> +	fp = fopen(realname, "r");
>  	if (!fp) {
> -		pr_warning("Failed to open %s: %s\n", fname,
> +		pr_warning("Failed to open %s: %s\n", realname,
>  			   strerror_r(errno, sbuf, sizeof(sbuf)));
> +		free(realname);
>  		return -errno;
>  	}
>  
> @@ -817,7 +826,10 @@ static int find_lazy_match_lines(struct intlist *list,
>  	fclose(fp);
>  
>  	if (count == 0)
> -		pr_debug("No matched lines found in %s.\n", fname);
> +		pr_debug("No matched lines found in %s.\n", realname);
> +
> +	free(realname);
> +
>  	return count;
>  }
>  
> 


-- 
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group
E-mail: masami.hiramatsu.pt@hitachi.com



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
                   ` (2 preceding siblings ...)
  2015-04-13 14:39 ` [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode Arnaldo Carvalho de Melo
@ 2015-04-13 15:42 ` Masami Hiramatsu
  2015-04-13 16:05   ` Arnaldo Carvalho de Melo
  2015-04-14 12:17 ` [tip:perf/urgent] " tip-bot for He Kuang
  4 siblings, 1 reply; 19+ messages in thread
From: Masami Hiramatsu @ 2015-04-13 15:42 UTC (permalink / raw)
  To: He Kuang; +Cc: acme, a.p.zijlstra, mingo, namhyung, wangnan0, linux-kernel

(2015/04/13 20:41), He Kuang wrote:
> Perf probe misses to set retprobe flag back when falling back to
> address-based alternative mode.
> 
> Can be reproduced as following:
> 
>   $ perf probe -v -k vmlinux --add='sys_write%return'
>   ...
>   Added new event:
>   Writing event: p:probe/sys_write _stext+1584952
>     probe:sys_write      (on sys_write%return)
> 
>   $ cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/sys_write _stext+1584952
> 
> After this patch:
> 
>   $ perf probe -v -k vmlinux --add='sys_write%return'
>   Added new event:
>   Writing event: r:probe/sys_write SyS_write+0
>     probe:sys_write      (on sys_write%return)
> 
>   $ cat /sys/kernel/debug/tracing/kprobe_events
>   r:probe/sys_write SyS_write
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>

Oops, I missed that!

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Thank you!

> ---
>  tools/perf/util/probe-event.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 30545ce..5483d98 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
>  	else {
>  		result->offset += pp->offset;
>  		result->line += pp->line;
> +		result->retprobe = pp->retprobe;
>  		ret = 0;
>  	}
>  
> 


-- 
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group
E-mail: masami.hiramatsu.pt@hitachi.com



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file
  2015-04-13 11:41 ` [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file He Kuang
@ 2015-04-13 16:03   ` Masami Hiramatsu
  2015-04-14 12:18   ` [tip:perf/urgent] " tip-bot for He Kuang
  1 sibling, 0 replies; 19+ messages in thread
From: Masami Hiramatsu @ 2015-04-13 16:03 UTC (permalink / raw)
  To: He Kuang; +Cc: acme, a.p.zijlstra, mingo, namhyung, wangnan0, linux-kernel

(2015/04/13 20:41), He Kuang wrote:
> The first argument passed to find_probe_point_lazy() should be CU die,
> which will be passed to die_walk_lines() when lazy_line
> matches. Currently, when we probe with lazy_line pattern to file without
> function name, NULL pointer is passed and causes a segment fault.
> 
> Can be repoduced as following:
> 
>   $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
>   [ 1958.984658] perf[1020]: segfault at 10 ip 00007fc6e10d8c71 sp
>   00007ffcbfaaf900 error 4 in libdw-0.161.so[7fc6e10ce000+34000]
>   Segmentation fault
> 
> After this patch:
> 
>   $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
>   Added new event:
>   probe:_stext         (on @fs/super.c)
> 
>   You can now use it in all perf tools, such as:
>     perf record -e probe:_stext -aR sleep 1
> 

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Thanks!

> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
>  tools/perf/util/probe-finder.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index 431c12d..e91101b 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -1067,7 +1067,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
>  			if (pp->function)
>  				ret = find_probe_point_by_func(pf);
>  			else if (pp->lazy_line)
> -				ret = find_probe_point_lazy(NULL, pf);
> +				ret = find_probe_point_lazy(&pf->cu_die, pf);
>  			else {
>  				pf->lno = pp->line;
>  				ret = find_probe_point_by_line(pf);
> 


-- 
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group
E-mail: masami.hiramatsu.pt@hitachi.com



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 15:41   ` Masami Hiramatsu
@ 2015-04-13 16:05     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 16:05 UTC (permalink / raw)
  To: Masami Hiramatsu
  Cc: He Kuang, a.p.zijlstra, mingo, namhyung, wangnan0, linux-kernel

Em Tue, Apr 14, 2015 at 12:41:03AM +0900, Masami Hiramatsu escreveu:
> Hi,
> 
> This one should already be fixed with Naohiro's patch.
> 
>  https://lkml.org/lkml/2015/3/13/16
> 
> Arnaldo, I've already given my ack for that.
> 
> https://lkml.org/lkml/2015/3/13/298
> 
> Should I resend that?

I will check that and apply, thanks!

- Arnaldo
 
> 
> Thank you,
> 
> (2015/04/13 20:41), He Kuang wrote:
> > Use get_real_path() to enable --source option when probe with lazy_line
> > pattern.
> > 
> > Before this patch:
> > 
> >   $ perf probe -s ./kernel_src/ -k ./vmlinux --add='fs/super.c;s->s_count=1;'
> >   Failed to open fs/super.c: No such file or directory
> >     Error: Failed to add events.
> > 
> > After this patch:
> > 
> >   $ perf probe -s ./kernel_src/ -k ./vmlinux  --add='fs/super.c;s->s_count=1;'
> >   Added new events:
> >     probe:_stext         (on @fs/super.c)
> >     probe:_stext_1       (on @fs/super.c)
> >   ...
> > 
> > Signed-off-by: He Kuang <hekuang@huawei.com>
> > ---
> >  tools/perf/util/probe-event.c  |  2 +-
> >  tools/perf/util/probe-event.h  |  2 ++
> >  tools/perf/util/probe-finder.c | 18 +++++++++++++++---
> >  3 files changed, 18 insertions(+), 4 deletions(-)
> > 
> > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> > index 5483d98..35ee51a 100644
> > --- a/tools/perf/util/probe-event.c
> > +++ b/tools/perf/util/probe-event.c
> > @@ -661,7 +661,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-event.h b/tools/perf/util/probe-event.h
> > index d6b7834..21809ea 100644
> > --- a/tools/perf/util/probe-event.h
> > +++ b/tools/perf/util/probe-event.h
> > @@ -135,6 +135,8 @@ extern int show_available_vars(struct perf_probe_event *pevs, int npevs,
> >  			       struct strfilter *filter, bool externs);
> >  extern int show_available_funcs(const char *module, struct strfilter *filter,
> >  				bool user);
> > +extern int get_real_path(const char *raw_path, const char *comp_dir,
> > +			char **new_path);
> >  
> >  /* Maximum index number of event-name postfix */
> >  #define MAX_EVENT_INDEX	1024
> > diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> > index 7831e2d..431c12d 100644
> > --- a/tools/perf/util/probe-finder.c
> > +++ b/tools/perf/util/probe-finder.c
> > @@ -791,11 +791,20 @@ static int find_lazy_match_lines(struct intlist *list,
> >  	ssize_t len;
> >  	int count = 0, linenum = 1;
> >  	char sbuf[STRERR_BUFSIZE];
> > +	char *realname = NULL;
> > +	int ret;
> >  
> > -	fp = fopen(fname, "r");
> > +	ret = get_real_path(fname, NULL, &realname);
> > +	if (ret < 0) {
> > +		pr_warning("Failed to find source file %s.\n", fname);
> > +		return ret;
> > +	}
> > +
> > +	fp = fopen(realname, "r");
> >  	if (!fp) {
> > -		pr_warning("Failed to open %s: %s\n", fname,
> > +		pr_warning("Failed to open %s: %s\n", realname,
> >  			   strerror_r(errno, sbuf, sizeof(sbuf)));
> > +		free(realname);
> >  		return -errno;
> >  	}
> >  
> > @@ -817,7 +826,10 @@ static int find_lazy_match_lines(struct intlist *list,
> >  	fclose(fp);
> >  
> >  	if (count == 0)
> > -		pr_debug("No matched lines found in %s.\n", fname);
> > +		pr_debug("No matched lines found in %s.\n", realname);
> > +
> > +	free(realname);
> > +
> >  	return count;
> >  }
> >  
> > 
> 
> 
> -- 
> Masami HIRAMATSU
> Linux Technology Research Center, System Productivity Research Dept.
> Center for Technology Innovation - Systems Engineering
> Hitachi, Ltd., Research & Development Group
> E-mail: masami.hiramatsu.pt@hitachi.com
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 15:42 ` Masami Hiramatsu
@ 2015-04-13 16:05   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 16:05 UTC (permalink / raw)
  To: Masami Hiramatsu
  Cc: He Kuang, a.p.zijlstra, mingo, namhyung, wangnan0, linux-kernel

Em Tue, Apr 14, 2015 at 12:42:52AM +0900, Masami Hiramatsu escreveu:
> (2015/04/13 20:41), He Kuang wrote:
> > Perf probe misses to set retprobe flag back when falling back to
> > address-based alternative mode.
> > 
> > Can be reproduced as following:
> > 
> >   $ perf probe -v -k vmlinux --add='sys_write%return'
> >   ...
> >   Added new event:
> >   Writing event: p:probe/sys_write _stext+1584952
> >     probe:sys_write      (on sys_write%return)
> > 
> >   $ cat /sys/kernel/debug/tracing/kprobe_events
> >   p:probe/sys_write _stext+1584952
> > 
> > After this patch:
> > 
> >   $ perf probe -v -k vmlinux --add='sys_write%return'
> >   Added new event:
> >   Writing event: r:probe/sys_write SyS_write+0
> >     probe:sys_write      (on sys_write%return)
> > 
> >   $ cat /sys/kernel/debug/tracing/kprobe_events
> >   r:probe/sys_write SyS_write
> > 
> > Signed-off-by: He Kuang <hekuang@huawei.com>
> 
> Oops, I missed that!
> 
> Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> 
> Thank you!

Thanks to both of you, will add the extra comments from He and apply
after testing with a freshly build kernel with CONFIG_DEBUG_INFO=y.

- Arnaldo
 
> > ---
> >  tools/perf/util/probe-event.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> > index 30545ce..5483d98 100644
> > --- a/tools/perf/util/probe-event.c
> > +++ b/tools/perf/util/probe-event.c
> > @@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
> >  	else {
> >  		result->offset += pp->offset;
> >  		result->line += pp->line;
> > +		result->retprobe = pp->retprobe;
> >  		ret = 0;
> >  	}
> >  
> > 
> 
> 
> -- 
> Masami HIRAMATSU
> Linux Technology Research Center, System Productivity Research Dept.
> Center for Technology Innovation - Systems Engineering
> Hitachi, Ltd., Research & Development Group
> E-mail: masami.hiramatsu.pt@hitachi.com
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 15:23   ` He Kuang
@ 2015-04-13 16:23     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 16:23 UTC (permalink / raw)
  To: He Kuang
  Cc: He Kuang, masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung,
	wangnan0, linux-kernel

Em Mon, Apr 13, 2015 at 11:23:12PM +0800, He Kuang escreveu:
> 
> 
> On 04/13/2015 10:39 PM, Arnaldo Carvalho de Melo wrote:
> >Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
> >>Perf probe misses to set retprobe flag back when falling back to
> >>address-based alternative mode.
> >
> >And when is that happens, can you explain? Because I tried to follow your
> >instructions, but in my case it worked in the same way before and after your
> >patch.
> >
> >Can you please provide more context for reviewing your patch?
> >
> 
> More details:
> 
>   [root]# perf probe -v -k vmlinux --add='sys_write%return'
>   probe-definition(0): sys_write%return
>   symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
>   0 arguments
>   Use vmlinux: vmlinux
>   map_groups__set_modules_path_dir: cannot open /lib/modules/4.0.0-rc6+ dir
>   Problems setting modules path maps, continuing anyway...
>   Using vmlinux for symbols
> 
>   Open Debuginfo file: vmlinux
>   >>>==========================
> 
>   Try to find probe point from debuginfo.
>   Symbol sys_write address found : ffffffff811a8cf0
>   Probe point found: SyS_write+0
>   Found 1 probe_trace_events.
>   Opening /sys/kernel/debug/tracing/kprobe_events write=1
>   Added new event:
>   Writing event: p:probe/sys_write _stext+1739560
>     probe:sys_write      (on sys_write%return)
> 
>   You can now use it in all perf tools, such as:
> 
>           perf record -e probe:sys_write -aR sleep 1
> 
>   [root@buildroot tmp]# cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/sys_write _stext+1739560
> 
> 
> The line I marked is different from your result, which is:
>   """Could not open debuginfo. Try to use symbols."""
> 
> 
> When perf probe searched in debuginfo and failed, it tried with alternative,
> in function get_alternative_probe_event():
> 
>         memcpy(tmp, &pev->point, sizeof(*tmp));
> 	memset(&pev->point, 0, sizeof(pev->point));
> 
> In this case, it drops the retprobe flag and forgets to set it back in
> find_alternative_probe_point(), so the problem occurred.

Thanks for the additional information! I will add it to the commit log.

I'm still not being able to reproduce your results, but this time was
because I tried using those separate .dwo debuginfo files, to check if
'perf' would support it already because elfutils would somehow hide that
from us, but that doesn't seem to be the case:

[root@ssdandy ~]# perf probe -v --add='sys_write%return'
probe-definition(0): sys_write%return
symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
0 arguments
Looking at the vmlinux_path (7 entries long)
Using /lib/modules/4.0.0-rc6+/build/vmlinux for symbols
Open Debuginfo file: /lib/modules/4.0.0-rc6+/build/vmlinux
Try to find probe point from debuginfo.
Symbol sys_write address found : ffffffff811e5f10
Failed to find scope of probe point.
An error occurred in debuginfo analysis (-2).
  Error: Failed to add events. Reason: No such file or directory (Code: -2)
[root@ssdandy ~]# cat /sys/kernel/debug/tracing/kprobe_events
[root@ssdandy ~]#

[root@ssdandy linux]# grep CONFIG_DEBUG_INFO ../build/v4.0.0-rc6+/.config
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
CONFIG_DEBUG_INFO_SPLIT=y
# CONFIG_DEBUG_INFO_DWARF4 is not set
[root@ssdandy linux]# 

Masami, this is about using CONFIG_DEBUG_INFO_SPLIT=y, that eventually we
should support, for now I will disable it and test again,

- Arnaldo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 15:38     ` He Kuang
@ 2015-04-13 20:42       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 20:42 UTC (permalink / raw)
  To: He Kuang
  Cc: He Kuang, masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung,
	wangnan0, linux-kernel

Em Mon, Apr 13, 2015 at 11:38:19PM +0800, He Kuang escreveu:
> Hi, Arnaldo
> 
> On 04/13/2015 10:42 PM, Arnaldo Carvalho de Melo wrote:
> >Em Mon, Apr 13, 2015 at 11:39:03AM -0300, Arnaldo Carvalho de Melo escreveu:
> >>Em Mon, Apr 13, 2015 at 07:41:28PM +0800, He Kuang escreveu:
> >>>Perf probe misses to set retprobe flag back when falling back to
> >>>address-based alternative mode.
> >
> >>Humm, noticed one other problem, but not with your patch, about this message:
> >
> >>"Could not open debuginfo. Try to use symbols."
> >
> >>That is really not clear, specially that "try to use symbols" :-)
> >
> >>[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda
> >>lrwxrwxrwx. 1 root root 86 Apr 10 18:02 /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda -> ../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> >>[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> >>-rwxr-xr-x. 1 root root 22698661 Apr 10 18:02 /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> >>[root@ssdandy ~]# ls -la /root/.debug/.build-id/dd/../../home/acme/git/build/v4.0.0-rc6+/vmlinux/dd32e51921ede0fd46f034091b7f6a0f2e01ebda
> >
> >>I.e. it managed to read the debuginfo, its just that it has no symbols in it :-)
> >
> >>Anyway, digression ended.
> >
> >Interesting is that when testing your next patch I see:
> >
> >   [root@ssdandy linux]#  perf probe -s ./kernel_src/ --add='fs/super.c;s->s_count=1;'
> >   The /root/.debug/.build-id/dd/32e51921ede0fd46f034091b7f6a0f2e01ebda file has no debug information.
> >   Rebuild with CONFIG_DEBUG_INFO=y, or install an appropriate debuginfo package.
> >     Error: Failed to add events.
> >   [root@ssdandy linux]#
> >
> >Much, much clear message about that debuginfo file :-)
> >
> >But then, to test your [2/3] patch I'll have to figure out how to setup the
> >environment so that I can match your results, shouldn't be hard, but would
> >save reviewing time if you stated it in the commit log message.
> 
> Sorry for not providing enough information.
> 
> -s ./kernel_src/
> 
> The kernel_src dir is a kernel source tree path, it can be
> anywhere, for test you can only put fs/super.c in it:
> 
> kernel_src/
>   -- fs
>      -- super.c
> 
> -k vmlinux
> 
> This is necessary and should be matched to your running kernel.

Normally I don't use this, as 'make install' will set it to a place that
the perf symbol code will look, check its build id, see that it matches
the what is running, i.e. this will hold true:

[root@ssdandy ~]# perf buildid-list --hell 2>&1 | grep -- --kernel
    -k, --kernel          Show current kernel build id
[root@ssdandy ~]# perf buildid-list --kernel
cd1d2cf9f473d0cac668e3afee32866da4540bd4
[root@ssdandy ~]#
[root@ssdandy ~]# perf buildid-list -i
/lib/modules/4.0.0-rc6+/build/vmlinux
cd1d2cf9f473d0cac668e3afee32866da4540bd4

I.e. no need to explicitely pass '-k vmlinux':

[root@ssdandy ~]# perf probe -v --add='sys_write%return'
probe-definition(0): sys_write%return
symbol:sys_write file:(null) line:0 offset:0 return:1 lazy:(null)
0 arguments
Looking at the vmlinux_path (7 entries long)
Using /lib/modules/4.0.0-rc6+/build/vmlinux for symbols
Open Debuginfo file: /lib/modules/4.0.0-rc6+/build/vmlinux
Try to find probe point from debuginfo.
Symbol sys_write address found : ffffffff811e5f10
Probe point found: SyS_write+0
Found 1 probe_trace_events.
Opening /sys/kernel/debug/tracing/kprobe_events write=1
Added new event:
Writing event: r:probe/sys_write SyS_write+0
  probe:sys_write      (on sys_write%return)

You can now use it in all perf tools, such as:

	perf record -e probe:sys_write -aR sleep 1

[root@ssdandy ~]#

- Arnaldo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
  2015-04-13 15:41   ` Masami Hiramatsu
@ 2015-04-13 20:56   ` Arnaldo Carvalho de Melo
  2015-04-13 20:57     ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 20:56 UTC (permalink / raw)
  To: He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Em Mon, Apr 13, 2015 at 07:41:29PM +0800, He Kuang escreveu:
> Use get_real_path() to enable --source option when probe with lazy_line
> pattern.
> 
> Before this patch:
> 
>   $ perf probe -s ./kernel_src/ -k ./vmlinux --add='fs/super.c;s->s_count=1;'
>   Failed to open fs/super.c: No such file or directory
>     Error: Failed to add events.
> 
> After this patch:
> 
>   $ perf probe -s ./kernel_src/ -k ./vmlinux  --add='fs/super.c;s->s_count=1;'
>   Added new events:
>     probe:_stext         (on @fs/super.c)
>     probe:_stext_1       (on @fs/super.c)
>   ...

Tried just doing:

[root@ssdandy ~]# ulimit -c 100000000
[root@ssdandy ~]# perf probe --add='fs/super.c;s->s_count=1;'
Segmentation fault (core dumped)

I.e. not specifying vmlinux, as it finds the right one looking at the vmlinux path,
and as well not specifying -s, as it should find that as well from the vmlinux file,
but here I get a segfault:

[root@ssdandy ~]# gdb -c core.26128 ~/bin/perf
<SNIP>
Core was generated by `perf probe --add=fs/super.c;s->s_count=1;'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f2a021301c1 in dwarf_tag () from /lib64/libdw.so.1
Missing separate debuginfos, use: debuginfo-install audit-libs-2.4.1-5.el7.x86_64 bzip2-libs-1.0.6-12.el7.x86_64 elfutils-libelf-0.160-1.el7.x86_64 elfutils-libs-0.160-1.el7.x86_64 glibc-2.17-78.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libunwind-1.1-3.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 numactl-libs-2.0.9-4.el7.x86_64 perl-libs-5.16.3-285.el7.x86_64 python-libs-2.7.5-16.el7.x86_64 slang-2.2.4-11.el7.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64 zlib-1.2.7-13.el7.x86_64
(gdb) bt
#0  0x00007f2a021301c1 in dwarf_tag () from /lib64/libdw.so.1

#1  0x00000000004e3b78 in die_walk_lines (rt_die=rt_die@entry=0x0, callback=callback@entry=0x4e0b10 <probe_point_lazy_walker>, data=data@entry=0x7ffff2da1750) at util/dwarf-aux.c:690
#2  0x00000000004dff19 in find_probe_point_lazy (sp_die=sp_die@entry=0x0, pf=pf@entry=0x7ffff2da1750) at util/probe-finder.c:867
#3  0x00000000004e06e2 in debuginfo__find_probes (pf=pf@entry=0x7ffff2da1750, dbg=0x1767c50) at util/probe-finder.c:1058
#4  0x00000000004e13b2 in debuginfo__find_trace_events (dbg=dbg@entry=0x1767c50, pev=pev@entry=0x8fcd90 <params+16>, tevs=tevs@entry=0x1763978, max_tevs=max_tevs@entry=128) at util/probe-finder.c:1218
#5  0x00000000004dcbea in try_to_find_probe_trace_events (target=0x0, max_tevs=128, tevs=0x1763978, pev=0x8fcd90 <params+16>) at util/probe-event.c:611
#6  convert_to_probe_trace_events (target=0x0, max_tevs=128, tevs=0x1763978, pev=0x8fcd90 <params+16>) at util/probe-event.c:2645
#7  add_perf_probe_events (pevs=pevs@entry=0x8fcd90 <params+16>, npevs=<optimized out>, max_tevs=128, force_add=false) at util/probe-event.c:2680
#8  0x000000000044fa7b in __cmd_probe (argc=<optimized out>, argv=argv@entry=0x7ffff2da2600, prefix=<optimized out>) at builtin-probe.c:504
#9  0x000000000044fc34 in cmd_probe (argc=<optimized out>, argv=0x7ffff2da2600, prefix=<optimized out>) at builtin-probe.c:521
#10 0x0000000000470b35 in run_builtin (p=p@entry=0x838420 <commands+384>, argc=argc@entry=2, argv=argv@entry=0x7ffff2da2600) at perf.c:370
#11 0x000000000041d220 in handle_internal_command (argv=0x7ffff2da2600, argc=2) at perf.c:429
#12 run_argv (argv=0x7ffff2da2380, argcp=0x7ffff2da238c) at perf.c:473
#13 main (argc=2, argv=0x7ffff2da2600) at perf.c:588
(gdb) 

Now with your patch, another coredump:

[root@ssdandy ~]# rm -f core.26128 
[root@ssdandy ~]# perf probe --add='fs/super.c;s->s_count=1;'
Segmentation fault (core dumped)
[root@ssdandy ~]#
[root@ssdandy ~]# gdb -c core.26712 ~/bin/perf
<SNIP>
Core was generated by `perf probe --add=fs/super.c;s->s_count=1;'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f25cf4e61c1 in dwarf_tag () from /lib64/libdw.so.1
Missing separate debuginfos, use: debuginfo-install audit-libs-2.4.1-5.el7.x86_64 bzip2-libs-1.0.6-12.el7.x86_64 elfutils-libelf-0.160-1.el7.x86_64 elfutils-libs-0.160-1.el7.x86_64 glibc-2.17-78.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libunwind-1.1-3.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 numactl-libs-2.0.9-4.el7.x86_64 perl-libs-5.16.3-285.el7.x86_64 python-libs-2.7.5-16.el7.x86_64 slang-2.2.4-11.el7.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64 zlib-1.2.7-13.el7.x86_64
(gdb) bt
#0  0x00007f25cf4e61c1 in dwarf_tag () from /lib64/libdw.so.1
#1  0x00000000004e3c18 in die_walk_lines (rt_die=rt_die@entry=0x0, callback=callback@entry=0x4e0bb0 <probe_point_lazy_walker>, data=data@entry=0x7ffdf9244df0) at util/dwarf-aux.c:690
#2  0x00000000004dff9b in find_probe_point_lazy (sp_die=sp_die@entry=0x0, pf=pf@entry=0x7ffdf9244df0) at util/probe-finder.c:879
#3  0x00000000004e0782 in debuginfo__find_probes (pf=pf@entry=0x7ffdf9244df0, dbg=0xe3ec50) at util/probe-finder.c:1070
#4  0x00000000004e1452 in debuginfo__find_trace_events (dbg=dbg@entry=0xe3ec50, pev=pev@entry=0x8fcd90 <params+16>, tevs=tevs@entry=0xe3a978, max_tevs=max_tevs@entry=128) at util/probe-finder.c:1230
#5  0x00000000004dcc2a in try_to_find_probe_trace_events (target=0x0, max_tevs=128, tevs=0xe3a978, pev=0x8fcd90 <params+16>) at util/probe-event.c:611
#6  convert_to_probe_trace_events (target=0x0, max_tevs=128, tevs=0xe3a978, pev=0x8fcd90 <params+16>) at util/probe-event.c:2645
#7  add_perf_probe_events (pevs=pevs@entry=0x8fcd90 <params+16>, npevs=<optimized out>, max_tevs=128, force_add=false) at util/probe-event.c:2680
#8  0x000000000044faab in __cmd_probe (argc=<optimized out>, argv=argv@entry=0x7ffdf9245ca0, prefix=<optimized out>) at builtin-probe.c:504
#9  0x000000000044fc64 in cmd_probe (argc=<optimized out>, argv=0x7ffdf9245ca0, prefix=<optimized out>) at builtin-probe.c:521
#10 0x0000000000470b65 in run_builtin (p=p@entry=0x838420 <commands+384>, argc=argc@entry=2, argv=argv@entry=0x7ffdf9245ca0) at perf.c:370
#11 0x000000000041d250 in handle_internal_command (argv=0x7ffdf9245ca0, argc=2) at perf.c:429
#12 run_argv (argv=0x7ffdf9245a20, argcp=0x7ffdf9245a2c) at perf.c:473
#13 main (argc=2, argv=0x7ffdf9245ca0) at perf.c:588
(gdb)

Trying exactly as you did, first without the patch:

[root@ssdandy linux]# perf probe -s /home/acme/git/linux/ -k ../build/v4.0.0-rc6+/vmlinux  --add='fs/super.c;s->s_count=1;'
Segmentation fault (core dumped)
[root@ssdandy linux]# 

Now with it:

[root@ssdandy linux]# perf probe -s /home/acme/git/linux/ -k ../build/v4.0.0-rc6+/vmlinux  --add='fs/super.c;s->s_count=1;'
Segmentation fault (core dumped)
[root@ssdandy linux]#

Core was generated by `perf probe -s /home/acme/git/linux/ -k ../build/v4.0.0-rc6+/vmlinux --add=fs/su'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f76795c01c1 in dwarf_tag () from /lib64/libdw.so.1
Missing separate debuginfos, use: debuginfo-install audit-libs-2.4.1-5.el7.x86_64 bzip2-libs-1.0.6-12.el7.x86_64 elfutils-libelf-0.160-1.el7.x86_64 elfutils-libs-0.160-1.el7.x86_64 glibc-2.17-78.el7.x86_64 libgcc-4.8.3-9.el7.x86_64 libunwind-1.1-3.el7.x86_64 nss-softokn-freebl-3.16.2.3-9.el7.x86_64 numactl-libs-2.0.9-4.el7.x86_64 perl-libs-5.16.3-285.el7.x86_64 python-libs-2.7.5-16.el7.x86_64 slang-2.2.4-11.el7.x86_64 xz-libs-5.1.2-9alpha.el7.x86_64 zlib-1.2.7-13.el7.x86_64
(gdb) bt
#0  0x00007f76795c01c1 in dwarf_tag () from /lib64/libdw.so.1
#1  0x00000000004e3c18 in die_walk_lines (rt_die=rt_die@entry=0x0, callback=callback@entry=0x4e0bb0 <probe_point_lazy_walker>, data=data@entry=0x7ffcf282f280) at util/dwarf-aux.c:690
#2  0x00000000004dff9b in find_probe_point_lazy (sp_die=sp_die@entry=0x0, pf=pf@entry=0x7ffcf282f280) at util/probe-finder.c:879
#3  0x00000000004e0782 in debuginfo__find_probes (pf=pf@entry=0x7ffcf282f280, dbg=0x19c1b30) at util/probe-finder.c:1070
#4  0x00000000004e1452 in debuginfo__find_trace_events (dbg=dbg@entry=0x19c1b30, pev=pev@entry=0x8fcd90 <params+16>, tevs=tevs@entry=0x19be778, max_tevs=max_tevs@entry=128) at util/probe-finder.c:1230
#5  0x00000000004dcc2a in try_to_find_probe_trace_events (target=0x0, max_tevs=128, tevs=0x19be778, pev=0x8fcd90 <params+16>) at util/probe-event.c:611
#6  convert_to_probe_trace_events (target=0x0, max_tevs=128, tevs=0x19be778, pev=0x8fcd90 <params+16>) at util/probe-event.c:2645
#7  add_perf_probe_events (pevs=pevs@entry=0x8fcd90 <params+16>, npevs=<optimized out>, max_tevs=128, force_add=false) at util/probe-event.c:2680
#8  0x000000000044faab in __cmd_probe (argc=<optimized out>, argv=argv@entry=0x7ffcf2830130, prefix=<optimized out>) at builtin-probe.c:504
#9  0x000000000044fc64 in cmd_probe (argc=<optimized out>, argv=0x7ffcf2830130, prefix=<optimized out>) at builtin-probe.c:521
#10 0x0000000000470b65 in run_builtin (p=p@entry=0x838420 <commands+384>, argc=argc@entry=6, argv=argv@entry=0x7ffcf2830130) at perf.c:370
#11 0x000000000041d250 in handle_internal_command (argv=0x7ffcf2830130, argc=6) at perf.c:429
#12 run_argv (argv=0x7ffcf282feb0, argcp=0x7ffcf282febc) at perf.c:473
#13 main (argc=6, argv=0x7ffcf2830130) at perf.c:588
(gdb)

And:

[acme@ssdandy linux]$ ls -la /home/acme/git/linux/fs/super.c
-rw-rw-r--. 1 acme acme 36192 Abr  7 17:59 /home/acme/git/linux/fs/super.c

Processed [1/3], looking if [3/3] can be applied independently of this one.

- Arnaldo


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 20:56   ` Arnaldo Carvalho de Melo
@ 2015-04-13 20:57     ` Arnaldo Carvalho de Melo
  2015-04-13 21:00       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 20:57 UTC (permalink / raw)
  To: He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Em Mon, Apr 13, 2015 at 05:56:59PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Apr 13, 2015 at 07:41:29PM +0800, He Kuang escreveu:
> 
> [root@ssdandy linux]# perf probe -s /home/acme/git/linux/ -k ../build/v4.0.0-rc6+/vmlinux  --add='fs/super.c;s->s_count=1;'
> Segmentation fault (core dumped)
> [root@ssdandy linux]#

[3/3] fixes a segfault, ok, probably this one, checking :-)

- Arnaldo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line
  2015-04-13 20:57     ` Arnaldo Carvalho de Melo
@ 2015-04-13 21:00       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 19+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-13 21:00 UTC (permalink / raw)
  To: He Kuang
  Cc: masami.hiramatsu.pt, a.p.zijlstra, mingo, namhyung, wangnan0,
	linux-kernel

Em Mon, Apr 13, 2015 at 05:57:51PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Apr 13, 2015 at 05:56:59PM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Mon, Apr 13, 2015 at 07:41:29PM +0800, He Kuang escreveu:
> > 
> > [root@ssdandy linux]# perf probe -s /home/acme/git/linux/ -k ../build/v4.0.0-rc6+/vmlinux  --add='fs/super.c;s->s_count=1;'
> > Segmentation fault (core dumped)
> > [root@ssdandy linux]#
> 
> [3/3] fixes a segfault, ok, probably this one, checking :-)

Ok, all three applied, thanks!

- Arnaldo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [tip:perf/urgent] perf probe: Set retprobe flag when probe in address-based alternative mode
  2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
                   ` (3 preceding siblings ...)
  2015-04-13 15:42 ` Masami Hiramatsu
@ 2015-04-14 12:17 ` tip-bot for He Kuang
  4 siblings, 0 replies; 19+ messages in thread
From: tip-bot for He Kuang @ 2015-04-14 12:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: a.p.zijlstra, hekuang, namhyung, mingo, tglx, acme, linux-kernel,
	masami.hiramatsu.pt, wangnan0, hpa

Commit-ID:  9d7b45c5721dfd524666bc1f07cf7d0855edb4d5
Gitweb:     http://git.kernel.org/tip/9d7b45c5721dfd524666bc1f07cf7d0855edb4d5
Author:     He Kuang <hekuang@huawei.com>
AuthorDate: Mon, 13 Apr 2015 19:41:28 +0800
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 13 Apr 2015 17:25:22 -0300

perf probe: Set retprobe flag when probe in address-based alternative mode

When perf probe searched in a debuginfo file and failed, it tried with
an alternative, in function get_alternative_probe_event():

        memcpy(tmp, &pev->point, sizeof(*tmp));
        memset(&pev->point, 0, sizeof(pev->point));

In this case, it drops the retprobe flag and forgets to set it back in
find_alternative_probe_point(), so the problem occurs.

Can be reproduced as following:

  $ perf probe -v -k vmlinux --add='sys_write%return'
  ...
  Added new event:
  Writing event: p:probe/sys_write _stext+1584952
    probe:sys_write      (on sys_write%return)

  $ cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/sys_write _stext+1584952

After this patch:

  $ perf probe -v -k vmlinux --add='sys_write%return'
  Added new event:
  Writing event: r:probe/sys_write SyS_write+0
    probe:sys_write      (on sys_write%return)

  $ cat /sys/kernel/debug/tracing/kprobe_events
  r:probe/sys_write SyS_write

Signed-off-by: He Kuang <hekuang@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1428925290-5623-1-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 30545ce..5483d98 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -332,6 +332,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
 	else {
 		result->offset += pp->offset;
 		result->line += pp->line;
+		result->retprobe = pp->retprobe;
 		ret = 0;
 	}
 

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [tip:perf/urgent] perf probe: Fix segfault when probe with lazy_line to file
  2015-04-13 11:41 ` [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file He Kuang
  2015-04-13 16:03   ` Masami Hiramatsu
@ 2015-04-14 12:18   ` tip-bot for He Kuang
  1 sibling, 0 replies; 19+ messages in thread
From: tip-bot for He Kuang @ 2015-04-14 12:18 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, acme, namhyung, a.p.zijlstra, linux-kernel, tglx,
	wangnan0, masami.hiramatsu.pt, hpa, hekuang

Commit-ID:  f19e80c640d58ddfd70f2454ee597f81ba966690
Gitweb:     http://git.kernel.org/tip/f19e80c640d58ddfd70f2454ee597f81ba966690
Author:     He Kuang <hekuang@huawei.com>
AuthorDate: Mon, 13 Apr 2015 19:41:30 +0800
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 13 Apr 2015 20:12:21 -0300

perf probe: Fix segfault when probe with lazy_line to file

The first argument passed to find_probe_point_lazy() should be CU die,
which will be passed to die_walk_lines() when lazy_line matches.
Currently, when we probe with lazy_line pattern to file without function
name, NULL pointer is passed and causes a segment fault.

Can be reproduced as following:

  $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
  [ 1958.984658] perf[1020]: segfault at 10 ip 00007fc6e10d8c71 sp
  00007ffcbfaaf900 error 4 in libdw-0.161.so[7fc6e10ce000+34000]
  Segmentation fault

After this patch:

  $ perf probe -k vmlinux --add='fs/super.c;s->s_count=1;'
  Added new event:
  probe:_stext         (on @fs/super.c)

  You can now use it in all perf tools, such as:
    perf record -e probe:_stext -aR sleep 1

Signed-off-by: He Kuang <hekuang@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1428925290-5623-3-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-finder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index ff7865c..44554c3 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1066,7 +1066,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
 			if (pp->function)
 				ret = find_probe_point_by_func(pf);
 			else if (pp->lazy_line)
-				ret = find_probe_point_lazy(NULL, pf);
+				ret = find_probe_point_lazy(&pf->cu_die, pf);
 			else {
 				pf->lno = pp->line;
 				ret = find_probe_point_by_line(pf);

^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2015-04-14 12:18 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-13 11:41 [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode He Kuang
2015-04-13 11:41 ` [PATCH 2/3] perf probe: Make --source avaiable when probe with lazy_line He Kuang
2015-04-13 15:41   ` Masami Hiramatsu
2015-04-13 16:05     ` Arnaldo Carvalho de Melo
2015-04-13 20:56   ` Arnaldo Carvalho de Melo
2015-04-13 20:57     ` Arnaldo Carvalho de Melo
2015-04-13 21:00       ` Arnaldo Carvalho de Melo
2015-04-13 11:41 ` [PATCH 3/3] perf probe: Fix segfault when probe with lazy_line to file He Kuang
2015-04-13 16:03   ` Masami Hiramatsu
2015-04-14 12:18   ` [tip:perf/urgent] " tip-bot for He Kuang
2015-04-13 14:39 ` [PATCH 1/3] perf probe: Set retprobe flag when probe in address-based alternative mode Arnaldo Carvalho de Melo
2015-04-13 14:42   ` Arnaldo Carvalho de Melo
2015-04-13 15:38     ` He Kuang
2015-04-13 20:42       ` Arnaldo Carvalho de Melo
2015-04-13 15:23   ` He Kuang
2015-04-13 16:23     ` Arnaldo Carvalho de Melo
2015-04-13 15:42 ` Masami Hiramatsu
2015-04-13 16:05   ` Arnaldo Carvalho de Melo
2015-04-14 12:17 ` [tip:perf/urgent] " tip-bot for He Kuang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.