diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2020-05-12 15:19:22 +0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2020-07-10 08:39:14 -0300 |
commit | 7eeb9855c1a4e6037bb1237a2a68ff1ee7aa4e67 (patch) | |
tree | 67be44f96c5a7e62712641bcaeddd5f290c98de6 /tools/perf/util/event.c | |
parent | 92ecf3a64f67297df0e454f98d8b3aa06286aa5d (diff) |
perf script: Show text poke address symbol
It is generally more useful to show the symbol with an address. In this
case, the print function requires the 'machine' which means changing
callers to provide it as a parameter. It is optional because most events
do not need it and the callers that matter can provide it.
Committer notes:
Made 'union perf_event' continue to be the first parameter to the
perf_event__fprintf() and perf_event__fprintf_text_poke() events.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
Cc: x86@kernel.org
Link: http://lore.kernel.org/lkml/20200512121922.8997-16-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/event.c')
-rw-r--r-- | tools/perf/util/event.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index dde2f0147713..317a26571845 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -440,14 +440,25 @@ static int text_poke_printer(enum binary_printer_ops op, unsigned int val, } } -size_t perf_event__fprintf_text_poke(union perf_event *event, FILE *fp) +size_t perf_event__fprintf_text_poke(union perf_event *event, struct machine *machine, FILE *fp) { struct perf_record_text_poke_event *tp = &event->text_poke; size_t ret; bool old; - ret = fprintf(fp, " %" PRI_lx64 " old len %u new len %u\n", - tp->addr, tp->old_len, tp->new_len); + ret = fprintf(fp, " %" PRI_lx64 " ", tp->addr); + if (machine) { + struct addr_location al; + + al.map = maps__find(&machine->kmaps, tp->addr); + if (al.map && map__load(al.map) >= 0) { + al.addr = al.map->map_ip(al.map, tp->addr); + al.sym = map__find_symbol(al.map, al.addr); + if (al.sym) + ret += symbol__fprintf_symname_offs(al.sym, &al, fp); + } + } + ret += fprintf(fp, " old len %u new len %u\n", tp->old_len, tp->new_len); old = true; ret += binary__fprintf(tp->bytes, tp->old_len, 16, text_poke_printer, &old, fp); @@ -457,7 +468,7 @@ size_t perf_event__fprintf_text_poke(union perf_event *event, FILE *fp) return ret; } -size_t perf_event__fprintf(union perf_event *event, FILE *fp) +size_t perf_event__fprintf(union perf_event *event, struct machine *machine, FILE *fp) { size_t ret = fprintf(fp, "PERF_RECORD_%s", perf_event__name(event->header.type)); @@ -502,7 +513,7 @@ size_t perf_event__fprintf(union perf_event *event, FILE *fp) ret += perf_event__fprintf_bpf(event, fp); break; case PERF_RECORD_TEXT_POKE: - ret += perf_event__fprintf_text_poke(event, fp); + ret += perf_event__fprintf_text_poke(event, machine, fp); break; default: ret += fprintf(fp, "\n"); |