Re: [PATCH] perf/script: allow --symbol to accept hexadecimal addresses
From: Ian Rogers
Date: Thu Apr 02 2020 - 13:43:29 EST
On Tue, Mar 31, 2020 at 12:11 PM Arnaldo Carvalho de Melo
<arnaldo.melo@xxxxxxxxx> wrote:
>
> Em Wed, Mar 25, 2020 at 03:08:02PM -0700, Ian Rogers escreveu:
> > From: Stephane Eranian <eranian@xxxxxxxxxx>
> >
> > 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
>
> Applied, can you please send a followup patch to the man page stating
> that this is supported?
Many thanks! I've sent:
https://lore.kernel.org/lkml/20200402174130.140319-1-irogers@xxxxxxxxxx/T/#u
Ian
> Thanks,
>
> - Arnaldo
>
> > Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>
> > Signed-off-by: Stephane Eranian <eranian@xxxxxxxxxx>
> > ---
> > tools/perf/util/event.c | 21 +++++++++++++++++----
> > 1 file changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
> > index c5447ff516a2..c978a73fe475 100644
> > --- a/tools/perf/util/event.c
> > +++ b/tools/perf/util/event.c
> > @@ -599,10 +599,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;
> > --
> > 2.25.1.696.g5e7596f4ac-goog
> >
>
> --
>
> - Arnaldo