perf jit: Make perf skip unknown records
authorStefano Sanfilippo <ssanfilippo@chromium.org>
Thu, 13 Oct 2016 10:59:38 +0000 (03:59 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 24 Oct 2016 14:07:38 +0000 (11:07 -0300)
The behavior before this commit was to skip the remaining portion of the
jitdump in case an unknown record was found, including those records
that perf could handle.

With this change, parsing a record with an unknown id will cause a
warning to be emitted, the record will be skipped and parsing will
resume from the next (valid) one.

The patch aims at making perf more future proof, by extracting as much
information as possible from jitdumps.

Signed-off-by: Stefano Sanfilippo <ssanfilippo@chromium.org>
Signed-off-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Stephane Eranian <eranian@google.com>
Cc: Anton Blanchard <anton@ozlabs.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1476356383-30100-5-git-send-email-eranian@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/jitdump.c

index f3ed3c963c71ffe409b41b1566e13bf6e9afca3e..75b66bbf8429c5eeb5a3444cd0929bc294bfce6f 100644 (file)
@@ -263,8 +263,7 @@ jit_get_next_entry(struct jit_buf_desc *jd)
                return NULL;
 
        if (id >= JIT_CODE_MAX) {
-               pr_warning("next_entry: unknown prefix %d, skipping\n", id);
-               return NULL;
+               pr_warning("next_entry: unknown record type %d, skipping\n", id);
        }
        if (bs > jd->bufsize) {
                void *n;
@@ -322,7 +321,8 @@ jit_get_next_entry(struct jit_buf_desc *jd)
                break;
        case JIT_CODE_MAX:
        default:
-               return NULL;
+               /* skip unknown record (we have read them) */
+               break;
        }
        return jr;
 }