perf-probe: fix perf-probe(1)'s report
PATCH 1/1 perf-probe: fix perf-probe(1)'s report
From: Franck Bui-Huu <[email protected]>
After adding probes, perf-probe(1) reports the probes locations which include filenames for certain cases.
But for short file names (whose length < 32), perf-probe didn't display the name correctly. It actually skipped the first character.
Here's an example where 'icmp.c' was screwed:
$ 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)This patch fixes this bug in synthesize_perf_probe_point().
--- tools/perf/util/probe-event.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-)
tools/perf/util/probe-event.c +8 -8
@@ -1077,13 +1077,13 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp) goto error; }if (pp->file) { - len =strlen (pp->file) -31 ; -if (len <0 ) - len =0 ; - tmp =strchr (pp->file + len,'/' ); -if (!tmp) - tmp = pp->file + len; - ret =e_snprintf (file,32 ,"@%s" , tmp +1 ); + tmp = pp->file; + len =strlen (tmp); +if (len >30 ) { + tmp =strchr (pp->file + len -30 ,'/' ); + tmp = tmp ? tmp +1 : pp->file + len -30 ; + } + ret =e_snprintf (file,32 ,"@%s" , tmp);if (ret <=0 ) goto error; }
@@ -1099,7 +1099,7 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)return buf; error: -pr_debug ("Failed to synthesize perf probe point: %s" , +pr_debug ("Failed to synthesize perf probe point: %s\n" ,strerror (-ret));if (buf)free (buf);
Signature · 1 line
1.7.3.2
Quoted 22 lines · Franck Bui-Huu
From: Franck Bui-Huu <[email protected]>
After adding probes, perf-probe(1) reports the probes locations which include filenames for certain cases.
But for short file names (whose length < 32), perf-probe didn't display the name correctly. It actually skipped the first character.
Here's an example where '
icmp.c' was screwed:$ 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)
Quoted 1 line
This patch fixes this bug in
synthesize_perf_probe_point().
Oops, I've missed that.
Thanks! that's really good catch!
Quoted 40 lines
Signed-off-by Franck Bui-Huu <[email protected]>--- tools/perf/util/probe-event.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-)tools/perf/util/probe-event.c +8
-8@@ -1077,13 +1077,13 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp) goto error; }if (pp->file) { - len =strlen (pp->file) -31 ; -if (len <0 ) - len =0 ; - tmp =strchr (pp->file + len,'/' ); -if (!tmp) - tmp = pp->file + len; - ret =e_snprintf (file,32 ,"@%s" , tmp +1 ); + tmp = pp->file; + len =strlen (tmp); +if (len >30 ) { + tmp =strchr (pp->file + len -30 ,'/' ); + tmp = tmp ? tmp +1 : pp->file + len -30 ; + } + ret =e_snprintf (file,32 ,"@%s" , tmp);if (ret <=0 ) goto error; }@@ -1099,7 +1099,7 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)return buf; error: -pr_debug ("Failed to synthesize perf probe point: %s" , +pr_debug ("Failed to synthesize perf probe point: %s\n" ,strerror (-ret));if (buf)free (buf);
Signature · 4 lines
Masami HIRAMATSU 2nd Dept. Linux Technology Center Hitachi, Ltd., Systems Development Laboratory E-mail: [email protected]
[tip:perf/core] perf probe: Fix short file name probe location reporting
In reply to Franck Bui-HuuCommit-ID: 32ae2ade462146729580117d9886cc9efd83dfbe Gitweb: http://git.kernel.org/tip/32ae2ade462146729580117d9886cc9efd83dfbe Author: Franck Bui-Huu <[email protected]> AuthorDate: Thu, 23 Dec 2010 16:04:23 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 27 Dec 2010 19:48:21 -0200
perf probe: Fix short file name probe location reporting
After adding probes, perf-probe(1) reports the probes locations which include filenames for certain cases.
But for short file names (whose length < 32), perf-probe didn't display the name correctly. It actually skipped the first character.
Here's an example where 'icmp.c' was screwed:
$ 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)This patch fixes this bug in synthesize_perf_probe_point().
LKML-Reference: <[email protected]>
--- tools/perf/util/probe-event.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-)
tools/perf/util/probe-event.c +7 -7
@@ -1068,13 +1068,13 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp) goto error; }if (pp->file) { - len =strlen (pp->file) -31 ; -if (len <0 ) - len =0 ; - tmp =strchr (pp->file + len,'/' ); -if (!tmp) - tmp = pp->file + len; - ret =e_snprintf (file,32 ,"@%s" , tmp +1 ); + tmp = pp->file; + len =strlen (tmp); +if (len >30 ) { + tmp =strchr (pp->file + len -30 ,'/' ); + tmp = tmp ? tmp +1 : pp->file + len -30 ; + } + ret =e_snprintf (file,32 ,"@%s" , tmp);if (ret <=0 ) goto error; }