Commit 547a92e0 authored by Akihiro Nagai's avatar Akihiro Nagai Committed by Arnaldo Carvalho de Melo

perf script: Unify the expressions indicating "unknown"

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@linux3Signed-off-by: default avatarAkihiro Nagai <akihiro.nagai.hw@hitachi.com>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f9d36996
...@@ -300,7 +300,7 @@ static void print_sample_start(struct perf_sample *sample, ...@@ -300,7 +300,7 @@ static void print_sample_start(struct perf_sample *sample,
} else } else
evname = __event_name(attr->type, attr->config); 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, ...@@ -323,7 +323,6 @@ static void print_sample_addr(union perf_event *event,
{ {
struct addr_location al; struct addr_location al;
u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK;
const char *symname, *dsoname;
printf("%16" PRIx64, sample->addr); printf("%16" PRIx64, sample->addr);
...@@ -343,21 +342,14 @@ static void print_sample_addr(union perf_event *event, ...@@ -343,21 +342,14 @@ static void print_sample_addr(union perf_event *event,
al.sym = map__find_symbol(al.map, al.addr, NULL); al.sym = map__find_symbol(al.map, al.addr, NULL);
if (PRINT_FIELD(SYM)) { if (PRINT_FIELD(SYM)) {
if (al.sym && al.sym->name) printf(" ");
symname = al.sym->name; symbol__fprintf_symname(al.sym, stdout);
else
symname = "";
printf(" %16s", symname);
} }
if (PRINT_FIELD(DSO)) { if (PRINT_FIELD(DSO)) {
if (al.map && al.map->dso && al.map->dso->name) printf(" (");
dsoname = al.map->dso->name; map__fprintf_dsoname(al.map, stdout);
else printf(")");
dsoname = "";
printf(" (%s)", dsoname);
} }
} }
......
...@@ -212,6 +212,18 @@ size_t map__fprintf(struct map *self, FILE *fp) ...@@ -212,6 +212,18 @@ size_t map__fprintf(struct map *self, FILE *fp)
self->start, self->end, self->pgoff, self->dso->name); 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. * objdump wants/reports absolute IPs for ET_EXEC, and RIPs for ET_DYN.
* map->dso->adjust_symbols==1 for ET_EXEC-like cases. * map->dso->adjust_symbols==1 for ET_EXEC-like cases.
......
...@@ -118,6 +118,7 @@ void map__delete(struct map *self); ...@@ -118,6 +118,7 @@ void map__delete(struct map *self);
struct map *map__clone(struct map *self); struct map *map__clone(struct map *self);
int map__overlap(struct map *l, struct map *r); int map__overlap(struct map *l, struct map *r);
size_t map__fprintf(struct map *self, FILE *fp); 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); int map__load(struct map *self, symbol_filter_t filter);
struct symbol *map__find_symbol(struct map *self, struct symbol *map__find_symbol(struct map *self,
......
...@@ -1296,7 +1296,6 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample, ...@@ -1296,7 +1296,6 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
int print_sym, int print_dso) int print_sym, int print_dso)
{ {
struct addr_location al; struct addr_location al;
const char *symname, *dsoname;
struct callchain_cursor *cursor = &evsel->hists.callchain_cursor; struct callchain_cursor *cursor = &evsel->hists.callchain_cursor;
struct callchain_cursor_node *node; struct callchain_cursor_node *node;
...@@ -1324,20 +1323,13 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample, ...@@ -1324,20 +1323,13 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
printf("\t%16" PRIx64, node->ip); printf("\t%16" PRIx64, node->ip);
if (print_sym) { if (print_sym) {
if (node->sym && node->sym->name) printf(" ");
symname = node->sym->name; symbol__fprintf_symname(node->sym, stdout);
else
symname = "";
printf(" %s", symname);
} }
if (print_dso) { if (print_dso) {
if (node->map && node->map->dso && node->map->dso->name) printf(" (");
dsoname = node->map->dso->name; map__fprintf_dsoname(al.map, stdout);
else printf(")");
dsoname = "";
printf(" (%s)", dsoname);
} }
printf("\n"); printf("\n");
...@@ -1347,21 +1339,14 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample, ...@@ -1347,21 +1339,14 @@ void perf_event__print_ip(union perf_event *event, struct perf_sample *sample,
} else { } else {
printf("%16" PRIx64, sample->ip); printf("%16" PRIx64, sample->ip);
if (print_sym) { if (print_sym) {
if (al.sym && al.sym->name) printf(" ");
symname = al.sym->name; symbol__fprintf_symname(al.sym, stdout);
else
symname = "";
printf(" %s", symname);
} }
if (print_dso) { if (print_dso) {
if (al.map && al.map->dso && al.map->dso->name) printf(" (");
dsoname = al.map->dso->name; map__fprintf_dsoname(al.map, stdout);
else printf(")");
dsoname = "";
printf(" (%s)", dsoname);
} }
} }
} }
......
...@@ -263,6 +263,18 @@ static size_t symbol__fprintf(struct symbol *sym, FILE *fp) ...@@ -263,6 +263,18 @@ static size_t symbol__fprintf(struct symbol *sym, FILE *fp)
sym->name); 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) void dso__set_long_name(struct dso *dso, char *name)
{ {
if (name == NULL) if (name == NULL)
......
...@@ -241,6 +241,7 @@ void machines__destroy_guest_kernel_maps(struct rb_root *machines); ...@@ -241,6 +241,7 @@ void machines__destroy_guest_kernel_maps(struct rb_root *machines);
int symbol__init(void); int symbol__init(void);
void symbol__exit(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); bool symbol_type__is_a(char symbol_type, enum map_type map_type);
size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp); size_t machine__fprintf_vmlinux_path(struct machine *machine, FILE *fp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment