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(-)

diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
index 64b377e591e4..a4fb25fb26f5 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -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",
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to