diff options
author | Stephane Eranian <[email protected]> | 2020-03-25 15:08:02 -0700 |
---|---|---|
committer | Arnaldo Carvalho de Melo <[email protected]> | 2020-04-03 09:37:56 -0300 |
commit | d2bedb7863e9817f71fe2332a85ecdbd0f264b4b (patch) | |
tree | d1e433a25f039743bbfbe3404daf110abcb33b8d | |
parent | 376c3c22e2ba69d7509aa070f1a7dd88efdb0a9c (diff) |
perf script: Allow --symbol to accept hexadecimal addresses
This patch extends the perf script --symbols option to filter on
hexadecimal addresses in addition to symbol names. This makes it easier
to handle cases where symbols are aliased.
With this patch, it is possible to mix and match symbols and hexadecimal
addresses using the --symbols option.
$ perf script --symbols=noploop,0x4007a0
Signed-off-by: Stephane Eranian <[email protected]>
Reviewed-by: Ian Rogers <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: http://lore.kernel.org/lkml/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
-rw-r--r-- | tools/perf/util/event.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 824c038e5c33..dc0e11214ae1 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -617,10 +617,23 @@ int machine__resolve(struct machine *machine, struct addr_location *al, al->sym = map__find_symbol(al->map, al->addr); } - if (symbol_conf.sym_list && - (!al->sym || !strlist__has_entry(symbol_conf.sym_list, - al->sym->name))) { - al->filtered |= (1 << HIST_FILTER__SYMBOL); + if (symbol_conf.sym_list) { + int ret = 0; + char al_addr_str[32]; + size_t sz = sizeof(al_addr_str); + + if (al->sym) { + ret = strlist__has_entry(symbol_conf.sym_list, + al->sym->name); + } + if (!(ret && al->sym)) { + snprintf(al_addr_str, sz, "0x%"PRIx64, + al->map->unmap_ip(al->map, al->sym->start)); + ret = strlist__has_entry(symbol_conf.sym_list, + al_addr_str); + } + if (!ret) + al->filtered |= (1 << HIST_FILTER__SYMBOL); } return 0; |