perf, tools: Fix crash while reading old perf.data
PATCH 1/2 perf, tools: Fix crash while reading old perf.data
From: Andi Kleen <[email protected]>
In some cases when reading perf.data generated by much older perf I got segfaults with dso->long_name being zero. This patch fixes them for me.
Haven't tracked down the exact cause. I assume it's some error path that doesn't set it.
--- tools/perf/util/machine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/machine.c +1 -1
@@ -1106,7 +1106,7 @@ static int machine__process_kernel_mmap_event(struct machine *machine,if (__machine__create_kernel_maps (machine, kernel) <0 ) goto out_problem; -if (strstr (dso->long_name,"vmlinux" )) +if (dso->long_name &&strstr (dso->long_name,"vmlinux" ))dso__set_short_name (dso,"[kernel.vmlinux]" , false);machine__set_kernel_mmap_len (machine, event);
Signature · 1 line
1.9.3
PATCH 2/2 perf, tools: Allow to force redirect pr_debug to stderr.
From: Andi Kleen <[email protected]>
When debugging the tui browser I find it useful to redirect the debug log into a file. Currently it's always forced to the message line.
Add an option to force it to stderr. Then it can be easily redirected.
--- tools/perf/util/debug.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
tools/perf/util/debug.c +3 -1
@@ -19,13 +19,14 @@int verbose;bool dump_trace = false, quiet = false;int debug_ordered_events; +static int redirect_to_stderr;static int _eprintf (int level,int var,const char *fmt,va_list args) {int ret =0 ;if (var >= level) { -if (use_browser >=1 ) +if (use_browser >=1 && !redirect_to_stderr)ui_helpline__vshow (fmt, args);else ret =vfprintf (stderr, fmt, args);
@@ -145,6 +146,7 @@ static struct debug_variable { } debug_variables[] = { { .name = "verbose", .ptr = &verbose }, { .name = "ordered-events", .ptr = &debug_ordered_events}, + { .name = "stderr", .ptr = &redirect_to_stderr}, { .name = NULL, } };
Signature · 1 line
1.9.3
tip-bot for Andi Kleen
merge bot[tip:perf/core] perf tools: Allow to force redirect pr_debug to stderr.
perf tools: Allow to force redirect pr_debug to stderr.
Commit-ID: f78eaef0e0493f6068777a246b9c4d9d5cf2b7aa Gitweb: http://git.kernel.org/tip/f78eaef0e0493f6068777a246b9c4d9d5cf2b7aa Author: Andi Kleen <[email protected]> AuthorDate: Fri, 21 Nov 2014 13:38:00 -0800 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 24 Nov 2014 18:03:48 -0300
perf tools: Allow to force redirect pr_debug to stderr.
When debugging the tui browser I find it useful to redirect the debug log into a file. Currently it's always forced to the message line.
Add an option to force it to stderr. Then it can be easily redirected.
Example:
[root@zoo ~]# perf --debug stderr report -vv 2> /tmp/debug
[root@zoo ~]# tail /tmp/debug
dso open failed, mmap: No such file or directory
dso open failed, mmap: No such file or directory
dso open failed, mmap: No such file or directory
dso open failed, mmap: No such file or directory
dso open failed, mmap: No such file or directory
Using /root/.debug/.build-id/4e/841948927029fb650132253642d5dbb2c1fb93 for symbols Failed to open /tmp/perf-8831.map, continuing without symbols
Failed to open /tmp/perf-12721.map, continuing without symbols Failed to open /tmp/perf-6966.map, continuing without symbols
Failed to open /tmp/perf-8802.map, continuing without symbols [root@zoo ~]#
--- tools/perf/util/debug.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
tools/perf/util/debug.c +3 -1
@@ -19,13 +19,14 @@int verbose;bool dump_trace = false, quiet = false;int debug_ordered_events; +static int redirect_to_stderr;static int _eprintf (int level,int var,const char *fmt,va_list args) {int ret =0 ;if (var >= level) { -if (use_browser >=1 ) +if (use_browser >=1 && !redirect_to_stderr)ui_helpline__vshow (fmt, args);else ret =vfprintf (stderr, fmt, args);
@@ -145,6 +146,7 @@ static struct debug_variable { } debug_variables[] = { { .name = "verbose", .ptr = &verbose }, { .name = "ordered-events", .ptr = &debug_ordered_events}, + { .name = "stderr", .ptr = &redirect_to_stderr}, { .name = NULL, } };
Quoted 8 lines · Andi Kleen
From: Andi Kleen <[email protected]>
In some cases when reading perf.data generated by much older perf I got segfaults with
dso->long_namebeing zero. This patch fixes them for me.Haven't tracked down the exact cause. I assume it's some error path that doesn't set it.
Any chance this patch fixies it for you?
330dfa224fcc perf tools: Fix segfault due to invalid kernel dso access
it's on latest acme/perf/core
jirka
Quoted 22 lines
Signed-off-by Andi Kleen <[email protected]>--- tools/perf/util/machine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)tools/perf/util/machine.c +1
-1@@ -1106,7 +1106,7 @@ static int machine__process_kernel_mmap_event(struct machine *machine,if (__machine__create_kernel_maps (machine, kernel) <0 ) goto out_problem; -if (strstr (dso->long_name,"vmlinux" )) +if (dso->long_name &&strstr (dso->long_name,"vmlinux" ))dso__set_short_name (dso,"[kernel.vmlinux]" , false);machine__set_kernel_mmap_len (machine, event);Signature · 1 line
1.9.3