perf tools: Fix bare address display value of callchain entries
Jiri Olsa
reviewerPATCH 1/1 perf tools: Fix bare address display value of callchain entries
In case we don't have symbol to display we display bare 'unmapped' address. This was unintentionally changed in recent commit:
5550171b2a9f perf callchain: Use al.addr to set up call chain
Putting the original way back.
Cc Andi Kleen <[email protected]>
Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Signed-off-by Jiri Olsa <[email protected]>
--- tools/perf/util/callchain.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
tools/perf/util/callchain.c +14 -6
@@ -816,22 +816,30 @@ out:char *callchain_list__sym_name (struct callchain_list *cl,char *bf,size_t bfsize,bool show_dso) { +struct map *map = cl->ms.map;int printed;if (cl->ms.sym) {if (callchain_param.key ==CCKEY_ADDRESS && - cl->ms.map && !cl->srcline) - cl->srcline =get_srcline (cl->ms.map->dso, -map__rip_2objdump (cl->ms.map, - cl->ip), + map && !cl->srcline) { + cl->srcline =get_srcline (map->dso, +map__rip_2objdump (map, cl->ip), cl->ms.sym, false); + }if (cl->srcline) printed =scnprintf (bf, bfsize,"%s %s" , cl->ms.sym->name, cl->srcline);else printed =scnprintf (bf, bfsize,"%s" , cl->ms.sym->name); - }else - printed =scnprintf (bf, bfsize,"%#" PRIx64, cl->ip); + }else { +/* +* The cl->ip value is unbased ip (applied map->map_ip). +* Display the unmap ip in case we have no symbol. +*/ +u64 addr = map ? map->unmap_ip (map, cl->ip) : cl->ip; + + printed =scnprintf (bf, bfsize,"%#" PRIx64, addr); + }if (show_dso) scnprintf(bf + printed, bfsize - printed, " %s",
Signature · 1 line
1.9.3