From: Adrian Hunter <[email protected]>

The address being used to calculate the offset was the memory address
but the address needed is the address mapped to the dso. i.e. the 'addr'
member of 'struct addr_location'

Signed-off-by: Adrian Hunter <[email protected]>
Acked-by: David Ahern <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Link: 
http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
 tools/perf/util/session.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 8a7da6f4a569..c236b38ed02b 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1515,6 +1515,8 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, 
struct perf_sample *sample,
                        node_al = *al;
 
                while (stack_depth) {
+                       u64 addr = 0;
+
                        node = callchain_cursor_current(&callchain_cursor);
                        if (!node)
                                break;
@@ -1525,10 +1527,13 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, 
struct perf_sample *sample,
                        if (print_ip)
                                printf("%c%16" PRIx64, s, node->ip);
 
+                       if (node->map)
+                               addr = node->map->map_ip(node->map, node->ip);
+
                        if (print_sym) {
                                printf(" ");
                                if (print_symoffset) {
-                                       node_al.addr = node->ip;
+                                       node_al.addr = addr;
                                        node_al.map  = node->map;
                                        symbol__fprintf_symname_offs(node->sym, 
&node_al, stdout);
                                } else
-- 
1.8.1.4

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