diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/callchain.c | 11 | ||||
-rw-r--r-- | tools/perf/util/callchain.h | 1 | ||||
-rw-r--r-- | tools/perf/util/srcline.c | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c index 38da69c8c1ff..b6624aeaaca9 100644 --- a/tools/perf/util/callchain.c +++ b/tools/perf/util/callchain.c | |||
@@ -815,7 +815,16 @@ char *callchain_list__sym_name(struct callchain_list *cl, | |||
815 | int printed; | 815 | int printed; |
816 | 816 | ||
817 | if (cl->ms.sym) { | 817 | if (cl->ms.sym) { |
818 | printed = scnprintf(bf, bfsize, "%s", cl->ms.sym->name); | 818 | if (callchain_param.key == CCKEY_ADDRESS && |
819 | cl->ms.map && !cl->srcline) | ||
820 | cl->srcline = get_srcline(cl->ms.map->dso, | ||
821 | map__rip_2objdump(cl->ms.map, | ||
822 | cl->ip)); | ||
823 | if (cl->srcline) | ||
824 | printed = scnprintf(bf, bfsize, "%s %s", | ||
825 | cl->ms.sym->name, cl->srcline); | ||
826 | else | ||
827 | printed = scnprintf(bf, bfsize, "%s", cl->ms.sym->name); | ||
819 | } else | 828 | } else |
820 | printed = scnprintf(bf, bfsize, "%#" PRIx64, cl->ip); | 829 | printed = scnprintf(bf, bfsize, "%#" PRIx64, cl->ip); |
821 | 830 | ||
diff --git a/tools/perf/util/callchain.h b/tools/perf/util/callchain.h index 3e1ed15d11f1..3f158474c892 100644 --- a/tools/perf/util/callchain.h +++ b/tools/perf/util/callchain.h | |||
@@ -70,6 +70,7 @@ extern struct callchain_param callchain_param; | |||
70 | struct callchain_list { | 70 | struct callchain_list { |
71 | u64 ip; | 71 | u64 ip; |
72 | struct map_symbol ms; | 72 | struct map_symbol ms; |
73 | char *srcline; | ||
73 | struct list_head list; | 74 | struct list_head list; |
74 | }; | 75 | }; |
75 | 76 | ||
diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c index 77c180637138..ac877f96fed7 100644 --- a/tools/perf/util/srcline.c +++ b/tools/perf/util/srcline.c | |||
@@ -258,7 +258,7 @@ char *get_srcline(struct dso *dso, unsigned long addr) | |||
258 | const char *dso_name; | 258 | const char *dso_name; |
259 | 259 | ||
260 | if (!dso->has_srcline) | 260 | if (!dso->has_srcline) |
261 | return SRCLINE_UNKNOWN; | 261 | goto out; |
262 | 262 | ||
263 | if (dso->symsrc_filename) | 263 | if (dso->symsrc_filename) |
264 | dso_name = dso->symsrc_filename; | 264 | dso_name = dso->symsrc_filename; |
@@ -289,7 +289,9 @@ out: | |||
289 | dso->has_srcline = 0; | 289 | dso->has_srcline = 0; |
290 | dso__free_a2l(dso); | 290 | dso__free_a2l(dso); |
291 | } | 291 | } |
292 | return SRCLINE_UNKNOWN; | 292 | if (asprintf(&srcline, "%s[%lx]", dso->short_name, addr) < 0) |
293 | return SRCLINE_UNKNOWN; | ||
294 | return srcline; | ||
293 | } | 295 | } |
294 | 296 | ||
295 | void free_srcline(char *srcline) | 297 | void free_srcline(char *srcline) |