]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
perf script: Unify the expressions indicating "unknown"
authorAkihiro Nagai <akihiro.nagai.hw@hitachi.com>
Mon, 30 Jan 2012 04:42:57 +0000 (13:42 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 30 Jan 2012 19:57:57 +0000 (17:57 -0200)
The perf script command uses various expressions to indicate "unknown".

It is unfriendly for user scripts to parse it. So, this patch unifies
the expressions to "[unknown]".

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: yrl.pp-manager.tt@hitachi.com
Link: http://lkml.kernel.org/r/20120130044257.2384.62905.stgit@linux3
Signed-off-by: Akihiro Nagai <akihiro.nagai.hw@hitachi.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-script.c
tools/perf/util/map.c
tools/perf/util/map.h
tools/perf/util/session.c
tools/perf/util/symbol.c
tools/perf/util/symbol.h

index bb68ddf257b7d77667ef9731ffb68c1494e0f239..add13ec15977a1cfa9f0f92ad8005a5cbf4fbd4e 100644 (file)
@@ -300,7 +300,7 @@ static void print_sample_start(struct perf_sample *sample,
                } else
                        evname = __event_name(attr->type, attr->config);
 
-               printf("%s: ", evname ? evname : "(unknown)");
+               printf("%s: ", evname ? evname : "[unknown]");
        }
 }
 
@@ -323,7 +323,6 @@ static void print_sample_addr(union perf_event *event,
 {
        struct addr_location al;
        u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
-       const char *symname, *dsoname;
 
        printf("%16" PRIx64, sample->addr);
 
@@ -343,21 +342,14 @@ static void print_sample_addr(union perf_event *event,
                al.sym = map__find_symbol(al.map, al.addr, NULL);
 
        if (PRINT_FIELD(SYM)) {
-               if (al.sym && al.sym->name)
-                       symname = al.sym->name;
-               else
-                       symname = "";
-
-               printf(" %16s", symname);
+               printf(" ");
+               symbol__fprintf_symname(al.sym, stdout);
        }
 
        if (PRINT_FIELD(DSO)) {
-               if (al.map && al.map->dso && al.map->dso->name)
-                       dsoname = al.map->dso->name;
-               else
-                       dsoname = "";
-
-               printf(" (%s)", dsoname);
+               printf(" (");
+               map__fprintf_dsoname(al.map, stdout);
+               printf(")");
        }
 }
 
index 316aa0ab71224142ce9594000b0ade67f0e5fd1f..11079607105bb8e2c364ae0ee2f3ce9beb643992 100644 (file)
@@ -212,6 +212,18 @@ size_t map__fprintf(struct map *self, FILE *fp)
                       self->start, self->end, self->pgoff, self->dso->name);
 }
 
+size_t map__fprintf_dsoname(struct map *map, FILE *fp)
+{
+       const char *dsoname;
+
+       if (map && map->dso && map->dso->name)
+               dsoname = map->dso->name;
+       else
+               dsoname = "[unknown]";
+
+       return fprintf(fp, "%s", dsoname);
+}
+
 /*
  * objdump wants/reports absolute IPs for ET_EXEC, and RIPs for ET_DYN.
  * map->dso->adjust_symbols==1 for ET_EXEC-like cases.
index 2b8017f8a9300b10eff9da098498c4e8a36415d1..b100c20b7f94f653448eaafcfb70e61e314f9e22 100644 (file)
@@ -118,6 +118,7 @@ void map__delete(struct map *self);
 struct map *map__clone(struct map *self);
 int map__overlap(struct map *l, struct map *r);
 size_t map__fprintf(struct map *self, FILE *fp);
+size_t map__fprintf_dsoname(struct map *map, FILE *fp);
 
 int map__load(struct map *self, symbol_filter_t filter);
 struct symbol *map__find_symbol(struct map *self,
index b5ca2558c7bb34783c1e94026ece6ba2ad5f61f2..e5334a976536d88d0dff86034becce2ff801d275 100644 (file)
@@ -1296,7 +1296,6 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
                          int print_sym, int print_dso)
 {
        struct addr_location al;
-       const char *symname, *dsoname;
        struct callchain_cursor *cursor = &evsel->hists.callchain_cursor;
        struct callchain_cursor_node *node;
 
@@ -1324,20 +1323,13 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
 
                        printf("\t%16" PRIx64, node->ip);
                        if (print_sym) {
-                               if (node->sym && node->sym->name)
-                                       symname = node->sym->name;
-                               else
-                                       symname = "";
-
-                               printf(" %s", symname);
+                               printf(" ");
+                               symbol__fprintf_symname(node->sym, stdout);
                        }
                        if (print_dso) {
-                               if (node->map && node->map->dso && node->map->dso->name)
-                                       dsoname = node->map->dso->name;
-                               else
-                                       dsoname = "";
-
-                               printf(" (%s)", dsoname);
+                               printf(" (");
+                               map__fprintf_dsoname(al.map, stdout);
+                               printf(")");
                        }
                        printf("\n");
 
@@ -1347,21 +1339,14 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
        } else {
                printf("%16" PRIx64, sample->ip);
                if (print_sym) {
-                       if (al.sym && al.sym->name)
-                               symname = al.sym->name;
-                       else
-                               symname = "";
-
-                       printf(" %s", symname);
+                       printf(" ");
+                       symbol__fprintf_symname(al.sym, stdout);
                }
 
                if (print_dso) {
-                       if (al.map && al.map->dso && al.map->dso->name)
-                               dsoname = al.map->dso->name;
-                       else
-                               dsoname = "";
-
-                       printf(" (%s)", dsoname);
+                       printf(" (");
+                       map__fprintf_dsoname(al.map, stdout);
+                       printf(")");
                }
        }
 }
index 0975438c3e7281f5d8fc70b28374e813e8715607..b580fa82911a864247313c360f828e63fc6fe5e3 100644 (file)
@@ -263,6 +263,18 @@ static size_t symbol__fprintf(struct symbol *sym, FILE *fp)
                       sym->name);
 }
 
+size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp)
+{
+       const char *symname;
+
+       if (sym && sym->name)
+               symname = sym->name;
+       else
+               symname = "[unknown]";
+
+       return fprintf(fp, "%s", symname);
+}
+
 void dso__set_long_name(struct dso *dso, char *name)
 {
        if (name == NULL)
index 123c2e14353e5b4c8d14d86ee82f8c4cdb3668cf..d349c7a00b049d31daa7dd47f38c701d3557a8e2 100644 (file)
@@ -241,6 +241,7 @@ void machines__destroy_guest_kernel_maps(struct rb_root *machines);
 
 int symbol__init(void);
 void symbol__exit(void);
+size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp);
 bool symbol_type__is_a(char symbol_type, enum map_type map_type);
 
 size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);