summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorStephane Eranian <eranian@google.com>2011-07-23 04:10:43 +0200
committerArnaldo Carvalho de Melo <acme@redhat.com>2011-08-18 07:21:13 -0300
commit777d1d71db622a5e1ff703495741c3d257b532e5 (patch)
tree924cf43db988a0d08f42dfb7e271157869a4fc3a /tools
parentcc2d86b04d9ac28a6be6cb05da6ea8f014fd5aa0 (diff)
downloadlwn-777d1d71db622a5e1ff703495741c3d257b532e5.tar.gz
lwn-777d1d71db622a5e1ff703495741c3d257b532e5.zip
perf tools: Fix error handling of unknown events
There was a problem with the parse_events() code not printing the correct event name when an event was unknown and starting with an 'r'. The source of the problem was the way raw notation was parsed. Without the patch: $ perf stat -e retired_foo invalid event modifier: 'tired_foo' With the patch: $ perf stat -e retired_foo invalid or unsupported event: 'retired_foo' This also covers the case where the name of the event was not printed at all when perf was linked with libpfm4. Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20110723021043.GA20178@quad Signed-off-by: Stephane Eranian <eranian@google.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/parse-events.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d93f3cea93c7..928918b796b2 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -697,7 +697,11 @@ parse_raw_event(const char **strp, struct perf_event_attr *attr)
return EVT_FAILED;
n = hex2u64(str + 1, &config);
if (n > 0) {
- *strp = str + n + 1;
+ const char *end = str + n + 1;
+ if (*end != '\0' && *end != ',' && *end != ':')
+ return EVT_FAILED;
+
+ *strp = end;
attr->type = PERF_TYPE_RAW;
attr->config = config;
return EVT_HANDLED;