perf trace: Check if sample raw_data field is set
Commit-ID: fc551f8d4427150da1ee7cbb0f53525c49ef4bca Gitweb: http://git.kernel.org/tip/fc551f8d4427150da1ee7cbb0f53525c49ef4bca Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Sat, 20 Oct 2012 13:08:46 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Sun, 21 Oct 2012 23:07:36 -0200
perf trace: Check if sample raw_data field is set
Sometimes we're segfaulting because we were expecting that the perf_sample.raw_data field was set as requested, but in some cases that needs further investigation, that field can be NULL, leading to segfaults.
Make the tool more robust by checking that before calling any per event handlers that may try to use that field.
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Mike Galbraith <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
tools/perf/builtin-trace.c +7 -0
@@ -268,6 +268,13 @@ again:if (evlist->threads->map[0 ] ==-1 || evlist->threads->nr >1 )printf ("%d " , sample.tid); +if (sample.raw_data ==NULL ) { +printf ("%s sample with no payload for tid: %d, cpu %d, raw_size=%d, skipping...\n" , +perf_evsel__name (evsel), sample.tid, + sample.cpu, sample.raw_size); +continue ; + } + handler = evsel->handler.func;handler (trace, evsel, &sample); }