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(). Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> LKML-Reference: <m31v588r9k.fsf@gmail.com> Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
ce0ac9e185
commit
32ae2ade46
|
@ -1068,13 +1068,13 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (pp->file) {
|
if (pp->file) {
|
||||||
len = strlen(pp->file) - 31;
|
tmp = pp->file;
|
||||||
if (len < 0)
|
len = strlen(tmp);
|
||||||
len = 0;
|
if (len > 30) {
|
||||||
tmp = strchr(pp->file + len, '/');
|
tmp = strchr(pp->file + len - 30, '/');
|
||||||
if (!tmp)
|
tmp = tmp ? tmp + 1 : pp->file + len - 30;
|
||||||
tmp = pp->file + len;
|
}
|
||||||
ret = e_snprintf(file, 32, "@%s", tmp + 1);
|
ret = e_snprintf(file, 32, "@%s", tmp);
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue