diff options
-rw-r--r-- | tools/perf/util/session.c | 1 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 5 |
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; |