Skip to contentSkip to conversation

perf trace: Check if sample raw_data field is set

tip:perf/urgent tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message Oct 24, 2012 perf events

lore
Share & tools
lore
#0 lore raw
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]>
---
 tools/perf/builtin-trace.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
tools/perf/builtin-trace.c +7 -0
index 83c6515..7aaee39 100644
@@ -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);
 		}