aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/callchain.c11
-rw-r--r--tools/perf/util/callchain.h1
-rw-r--r--tools/perf/util/srcline.c6
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;
70struct callchain_list { 70struct 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
295void free_srcline(char *srcline) 297void free_srcline(char *srcline)