perf report: add more debugging
authorIngo Molnar <mingo@elte.hu>
Tue, 26 May 2009 17:03:36 +0000 (19:03 +0200)
committerIngo Molnar <mingo@elte.hu>
Tue, 26 May 2009 18:22:56 +0000 (20:22 +0200)
Add the offset of the file we are analyzing, and the size of the record.

In case of problems it's easier to see where the parser lost track.

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: John Kacur <jkacur@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Documentation/perf_counter/builtin-report.c

index 4b5ccc5bd0e61ca9bc67dc58127027fe1b565f05..2d4e4cc655a3867454b687d49c2edb7ba16111e8 100644 (file)
@@ -645,7 +645,7 @@ static int __cmd_report(void)
        char *buf;
        event_t *event;
        int ret, rc = EXIT_FAILURE;
-       unsigned long total = 0, total_mmap = 0, total_comm = 0, total_unknown;
+       unsigned long total = 0, total_mmap = 0, total_comm = 0, total_unknown = 0;
 
        input = open(input_name, O_RDONLY);
        if (input < 0) {
@@ -699,8 +699,6 @@ more:
                goto done;
        }
 
-       head += event->header.size;
-
        if (event->header.misc & PERF_EVENT_MISC_OVERFLOW) {
                char level;
                int show = 0;
@@ -709,7 +707,9 @@ more:
                uint64_t ip = event->ip.ip;
 
                if (dump_trace) {
-                       fprintf(stderr, "PERF_EVENT (IP, %d): %d: %p\n",
+                       fprintf(stderr, "%p [%p]: PERF_EVENT (IP, %d): %d: %p\n",
+                               (void *)(offset + head),
+                               (void *)(long)(event->header.size),
                                event->header.misc,
                                event->ip.pid,
                                (void *)event->ip.ip);
@@ -753,7 +753,9 @@ more:
                struct map *map = map__new(&event->mmap);
 
                if (dump_trace) {
-                       fprintf(stderr, "PERF_EVENT_MMAP: [%p(%p) @ %p]: %s\n",
+                       fprintf(stderr, "%p [%p]: PERF_EVENT_MMAP: [%p(%p) @ %p]: %s\n",
+                               (void *)(offset + head),
+                               (void *)(long)(event->header.size),
                                (void *)event->mmap.start,
                                (void *)event->mmap.len,
                                (void *)event->mmap.pgoff,
@@ -771,7 +773,9 @@ more:
                struct thread *thread = threads__findnew(event->comm.pid);
 
                if (dump_trace) {
-                       fprintf(stderr, "PERF_EVENT_COMM: %s:%d\n",
+                       fprintf(stderr, "%p [%p]: PERF_EVENT_COMM: %s:%d\n",
+                               (void *)(offset + head),
+                               (void *)(long)(event->header.size),
                                event->comm.comm, event->comm.pid);
                }
                if (thread == NULL ||
@@ -783,12 +787,16 @@ more:
                break;
        }
        default: {
-               fprintf(stderr, "skipping unknown header type: %d\n",
+               fprintf(stderr, "%p [%p]: skipping unknown header type: %d\n",
+                       (void *)(offset + head),
+                       (void *)(long)(event->header.size),
                        event->header.type);
                total_unknown++;
        }
        }
 
+       head += event->header.size;
+
        if (offset + head < stat.st_size)
                goto more;