aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/session.c1
-rw-r--r--tools/perf/util/symbol.c5
2 files changed, 5 insertions, 1 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 07642a7b9346..1fc0c628683e 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1513,6 +1513,7 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, union perf_event *event,
1513 printf(" "); 1513 printf(" ");
1514 if (print_symoffset) { 1514 if (print_symoffset) {
1515 al.addr = node->ip; 1515 al.addr = node->ip;
1516 al.map = node->map;
1516 symbol__fprintf_symname_offs(node->sym, &al, stdout); 1517 symbol__fprintf_symname_offs(node->sym, &al, stdout);
1517 } else 1518 } else
1518 symbol__fprintf_symname(node->sym, stdout); 1519 symbol__fprintf_symname(node->sym, stdout);
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 77f3b95bb46d..7eb0362f4ffd 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -259,7 +259,10 @@ size_t symbol__fprintf_symname_offs(const struct symbol *sym,
259 if (sym && sym->name) { 259 if (sym && sym->name) {
260 length = fprintf(fp, "%s", sym->name); 260 length = fprintf(fp, "%s", sym->name);
261 if (al) { 261 if (al) {
262 offset = al->addr - sym->start; 262 if (al->addr < sym->end)
263 offset = al->addr - sym->start;
264 else
265 offset = al->addr - al->map->start - sym->start;
263 length += fprintf(fp, "+0x%lx", offset); 266 length += fprintf(fp, "+0x%lx", offset);
264 } 267 }
265 return length; 268 return length;