perf report: Print more info instead of <unknown> entries
authorIngo Molnar <mingo@elte.hu>
Tue, 2 Jun 2009 21:24:45 +0000 (23:24 +0200)
committerIngo Molnar <mingo@elte.hu>
Tue, 2 Jun 2009 21:24:45 +0000 (23:24 +0200)
Sometimes we still fail to find a DSO or look up a symbol,
print out the raw information in this case (which an help
debug the problem), instead of a not very helpful <unknown>
string.

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>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Documentation/perf_counter/builtin-report.c

index b84aaf18bf1f72b2f239ddbb59b9c87712375b5e..270e986c2d42a69a8207200eeef72e93774c2c07 100644 (file)
@@ -201,7 +201,9 @@ static struct thread *thread__new(pid_t pid)
 
        if (self != NULL) {
                self->pid = pid;
-               self->comm = NULL;
+               self->comm = malloc(30);
+               if (self->comm)
+                       sprintf(self->comm, ":%d", pid);
                INIT_LIST_HEAD(&self->maps);
        }
 
@@ -333,7 +335,7 @@ sort__comm_cmp(struct hist_entry *left, struct hist_entry *right)
 static size_t
 sort__comm_print(FILE *fp, struct hist_entry *self)
 {
-       return fprintf(fp, "  %16s", self->thread->comm ?: "<unknown>");
+       return fprintf(fp, "  %16s", self->thread->comm);
 }
 
 static struct sort_entry sort_comm = {
@@ -363,7 +365,10 @@ sort__dso_cmp(struct hist_entry *left, struct hist_entry *right)
 static size_t
 sort__dso_print(FILE *fp, struct hist_entry *self)
 {
-       return fprintf(fp, "  %-25s", self->dso ? self->dso->name : "<unknown>");
+       if (self->dso)
+               return fprintf(fp, "  %-25s", self->dso->name);
+
+       return fprintf(fp, "  %016llx", (__u64)self->ip);
 }
 
 static struct sort_entry sort_dso = {
@@ -392,11 +397,17 @@ sort__sym_print(FILE *fp, struct hist_entry *self)
        size_t ret = 0;
 
        if (verbose)
-               ret += fprintf(fp, "  %#018llx", (unsigned long long)self->ip);
+               ret += fprintf(fp, "  %#018llx", (__u64)self->ip);
+
+       if (self->dso)
+               ret += fprintf(fp, "  %s: ", self->dso->name);
+       else
+               ret += fprintf(fp, "  %#016llx: ", (__u64)self->ip);
 
-       ret += fprintf(fp, "  %s: %s",
-                       self->dso ? self->dso->name : "<unknown>",
-                       self->sym ? self->sym->name : "<unknown>");
+       if (self->sym)
+               ret += fprintf(fp, "%s", self->sym->name);
+       else
+               ret += fprintf(fp, "%#016llx", (__u64)self->ip);
 
        return ret;
 }
@@ -772,7 +783,8 @@ more:
                                event->mmap.filename);
                }
                if (thread == NULL || map == NULL) {
-                       fprintf(stderr, "problem processing PERF_EVENT_MMAP, skipping event.\n");
+                       if (verbose)
+                               fprintf(stderr, "problem processing PERF_EVENT_MMAP, skipping event.\n");
                        goto broken_event;
                }
                thread__insert_map(thread, map);