aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@kernel.org>2016-11-16 01:06:27 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-11-23 08:44:06 -0500
commita8763445f6c78628bd96d51649745065c0bb2c92 (patch)
tree6cde1ce21719fd986473a631d318f77be2759909 /tools/perf
parent3a5bfab60e59d9407b69f447702c4cd14326c825 (diff)
perf symbols: Print symbol offsets conditionally
The __symbol__fprintf_symname_offs() always shows symbol offsets. So there's no difference between 'perf script -F ip,sym' and 'perf script -F ip,sym,symoff'. I don't think it's a desired behavior.. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/20161116060634.28477-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/util/evsel_fprintf.c6
-rw-r--r--tools/perf/util/symbol.h3
-rw-r--r--tools/perf/util/symbol_fprintf.c11
3 files changed, 12 insertions, 8 deletions
diff --git a/tools/perf/util/evsel_fprintf.c b/tools/perf/util/evsel_fprintf.c
index 662a0a6182e7..ccb602397b60 100644
--- a/tools/perf/util/evsel_fprintf.c
+++ b/tools/perf/util/evsel_fprintf.c
@@ -137,7 +137,8 @@ int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
137 137
138 if (print_symoffset) { 138 if (print_symoffset) {
139 printed += __symbol__fprintf_symname_offs(node->sym, &node_al, 139 printed += __symbol__fprintf_symname_offs(node->sym, &node_al,
140 print_unknown_as_addr, fp); 140 print_unknown_as_addr,
141 true, fp);
141 } else { 142 } else {
142 printed += __symbol__fprintf_symname(node->sym, &node_al, 143 printed += __symbol__fprintf_symname(node->sym, &node_al,
143 print_unknown_as_addr, fp); 144 print_unknown_as_addr, fp);
@@ -188,7 +189,8 @@ int sample__fprintf_sym(struct perf_sample *sample, struct addr_location *al,
188 printed += fprintf(fp, " "); 189 printed += fprintf(fp, " ");
189 if (print_symoffset) { 190 if (print_symoffset) {
190 printed += __symbol__fprintf_symname_offs(al->sym, al, 191 printed += __symbol__fprintf_symname_offs(al->sym, al,
191 print_unknown_as_addr, fp); 192 print_unknown_as_addr,
193 true, fp);
192 } else { 194 } else {
193 printed += __symbol__fprintf_symname(al->sym, al, 195 printed += __symbol__fprintf_symname(al->sym, al,
194 print_unknown_as_addr, fp); 196 print_unknown_as_addr, fp);
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 2d0a905c879a..dec7e2d44885 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -282,7 +282,8 @@ int symbol__annotation_init(void);
282struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name); 282struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name);
283size_t __symbol__fprintf_symname_offs(const struct symbol *sym, 283size_t __symbol__fprintf_symname_offs(const struct symbol *sym,
284 const struct addr_location *al, 284 const struct addr_location *al,
285 bool unknown_as_addr, FILE *fp); 285 bool unknown_as_addr,
286 bool print_offsets, FILE *fp);
286size_t symbol__fprintf_symname_offs(const struct symbol *sym, 287size_t symbol__fprintf_symname_offs(const struct symbol *sym,
287 const struct addr_location *al, FILE *fp); 288 const struct addr_location *al, FILE *fp);
288size_t __symbol__fprintf_symname(const struct symbol *sym, 289size_t __symbol__fprintf_symname(const struct symbol *sym,
diff --git a/tools/perf/util/symbol_fprintf.c b/tools/perf/util/symbol_fprintf.c
index a680bdaa65dc..7c6b33e8e2d2 100644
--- a/tools/perf/util/symbol_fprintf.c
+++ b/tools/perf/util/symbol_fprintf.c
@@ -15,14 +15,15 @@ size_t symbol__fprintf(struct symbol *sym, FILE *fp)
15 15
16size_t __symbol__fprintf_symname_offs(const struct symbol *sym, 16size_t __symbol__fprintf_symname_offs(const struct symbol *sym,
17 const struct addr_location *al, 17 const struct addr_location *al,
18 bool unknown_as_addr, FILE *fp) 18 bool unknown_as_addr,
19 bool print_offsets, FILE *fp)
19{ 20{
20 unsigned long offset; 21 unsigned long offset;
21 size_t length; 22 size_t length;
22 23
23 if (sym && sym->name) { 24 if (sym && sym->name) {
24 length = fprintf(fp, "%s", sym->name); 25 length = fprintf(fp, "%s", sym->name);
25 if (al) { 26 if (al && print_offsets) {
26 if (al->addr < sym->end) 27 if (al->addr < sym->end)
27 offset = al->addr - sym->start; 28 offset = al->addr - sym->start;
28 else 29 else
@@ -40,19 +41,19 @@ size_t symbol__fprintf_symname_offs(const struct symbol *sym,
40 const struct addr_location *al, 41 const struct addr_location *al,
41 FILE *fp) 42 FILE *fp)
42{ 43{
43 return __symbol__fprintf_symname_offs(sym, al, false, fp); 44 return __symbol__fprintf_symname_offs(sym, al, false, true, fp);
44} 45}
45 46
46size_t __symbol__fprintf_symname(const struct symbol *sym, 47size_t __symbol__fprintf_symname(const struct symbol *sym,
47 const struct addr_location *al, 48 const struct addr_location *al,
48 bool unknown_as_addr, FILE *fp) 49 bool unknown_as_addr, FILE *fp)
49{ 50{
50 return __symbol__fprintf_symname_offs(sym, al, unknown_as_addr, fp); 51 return __symbol__fprintf_symname_offs(sym, al, unknown_as_addr, false, fp);
51} 52}
52 53
53size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp) 54size_t symbol__fprintf_symname(const struct symbol *sym, FILE *fp)
54{ 55{
55 return __symbol__fprintf_symname_offs(sym, NULL, false, fp); 56 return __symbol__fprintf_symname_offs(sym, NULL, false, false, fp);
56} 57}
57 58
58size_t dso__fprintf_symbols_by_name(struct dso *dso, 59size_t dso__fprintf_symbols_by_name(struct dso *dso,