Hi Ian, On Fri, Feb 2, 2024 at 5:42 PM Ian Rogers <irogers@xxxxxxxxxx> wrote: > > On Fri, Feb 2, 2024 at 2:05 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote: > > > > Sometimes we want to convert an address in objdump output to > > map-relative address to match with a sample data. Let's add > > map__objdump_2rip() for that. > > Hi Namhyung, > > I think the naming can be better here. Aren't the objdump addresses > DSO relative offsets? Is the relative IP relative to the map or the > DSO? AFAIK the objdump addresses are DSO-relative and rip is to map. They are mostly the same but sometimes different due to kASLR for the kernel. > > > Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx> > > Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx> > > --- > > tools/perf/util/map.c | 20 ++++++++++++++++++++ > > tools/perf/util/map.h | 3 +++ > > 2 files changed, 23 insertions(+) > > > > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > > index 54c67cb7ecef..66542864b7b5 100644 > > --- a/tools/perf/util/map.c > > +++ b/tools/perf/util/map.c > > @@ -594,6 +594,26 @@ u64 map__objdump_2mem(struct map *map, u64 ip) > > return ip + map__reloc(map); > > } > > > > +u64 map__objdump_2rip(struct map *map, u64 ip) > > +{ > > + const struct dso *dso = map__dso(map); > > + > > + if (!dso->adjust_symbols) > > + return ip; > > + > > + if (dso->rel) > > + return ip + map__pgoff(map); > > + > > + /* > > + * kernel modules also have DSO_TYPE_USER in dso->kernel, > > + * but all kernel modules are ET_REL, so won't get here. > > + */ Hmm.. This comment is not true anymore. Will remove in other places too. Thanks, Namhyung > > + if (dso->kernel == DSO_SPACE__USER) > > + return ip - dso->text_offset; > > + > > + return map__map_ip(map, ip + map__reloc(map)); > > +} > > + > > bool map__contains_symbol(const struct map *map, const struct symbol *sym) > > { > > u64 ip = map__unmap_ip(map, sym->start); > > diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h > > index 49756716cb13..65e2609fa1b1 100644 > > --- a/tools/perf/util/map.h > > +++ b/tools/perf/util/map.h > > @@ -132,6 +132,9 @@ u64 map__rip_2objdump(struct map *map, u64 rip); > > /* objdump address -> memory address */ > > u64 map__objdump_2mem(struct map *map, u64 ip); > > > > +/* objdump address -> rip */ > > +u64 map__objdump_2rip(struct map *map, u64 ip); > > + > > struct symbol; > > struct thread; > > > > -- > > 2.43.0.594.gd9cf4e227d-goog > >