Skip to content

Commit

Permalink
perf script: Unify the expressions indicating "unknown"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Akihiro Nagai authored and Arnaldo Carvalho de Melo committed Jan 30, 2012
1 parent f9d3699 commit 547a92e
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 39 deletions.
20 changes: 6 additions & 14 deletions tools/perf/builtin-script.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]");
}
}

Expand All @@ -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);

Expand All @@ -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(")");
}
}

Expand Down
12 changes: 12 additions & 0 deletions tools/perf/util/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
35 changes: 10 additions & 25 deletions tools/perf/util/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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");

Expand All @@ -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(")");
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions tools/perf/util/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/symbol.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 547a92e

Please sign in to comment.