aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/session.c
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2013-12-06 02:42:56 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-12-09 09:13:50 -0500
commita4eb24a49566db77ee999b46603f602a0302f481 (patch)
tree0ef9e76a2e9f1c25b0b73e6a76d52ebb47744b19 /tools/perf/util/session.c
parent3a3ffa2e82205921d1189f1055c22dae4c72819a (diff)
perf script: Fix symoff printing in callchains
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 <adrian.hunter@intel.com> Acked-by: David Ahern <dsahern@gmail.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1386315778-11633-2-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r--tools/perf/util/session.c7
1 files changed, 6 insertions, 1 deletions
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,
1515 node_al = *al; 1515 node_al = *al;
1516 1516
1517 while (stack_depth) { 1517 while (stack_depth) {
1518 u64 addr = 0;
1519
1518 node = callchain_cursor_current(&callchain_cursor); 1520 node = callchain_cursor_current(&callchain_cursor);
1519 if (!node) 1521 if (!node)
1520 break; 1522 break;
@@ -1525,10 +1527,13 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample,
1525 if (print_ip) 1527 if (print_ip)
1526 printf("%c%16" PRIx64, s, node->ip); 1528 printf("%c%16" PRIx64, s, node->ip);
1527 1529
1530 if (node->map)
1531 addr = node->map->map_ip(node->map, node->ip);
1532
1528 if (print_sym) { 1533 if (print_sym) {
1529 printf(" "); 1534 printf(" ");
1530 if (print_symoffset) { 1535 if (print_symoffset) {
1531 node_al.addr = node->ip; 1536 node_al.addr = addr;
1532 node_al.map = node->map; 1537 node_al.map = node->map;
1533 symbol__fprintf_symname_offs(node->sym, &node_al, stdout); 1538 symbol__fprintf_symname_offs(node->sym, &node_al, stdout);
1534 } else 1539 } else