aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2014-10-14 16:19:44 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2014-10-14 16:50:58 -0400
commit2c241bd35e6f626ad6f867dcf9fefdc2315f125f (patch)
treed6fd5a27175180423ef19d9c5efd8493f7cef305 /tools
parenteba85230de892e2a925c85dca1fe177e8b3d84d8 (diff)
perf symbols: Make sym->end be the first address after the symbol range
To follow vm_area_struct->vm_end convention. By adhering to the convention that ->end is the first address outside the symbol's range we can do things like: sym->end = start + len; len = sym->end - sym->start; This is also now the convention used for struct map->end, fixing some off-by-one bugs. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Chuck Ebbert <cebbert.lkml@gmail.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-agomujr7tuqaq6lu7kr6z7h6@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/annotate.c8
-rw-r--r--tools/perf/util/symbol.c6
-rw-r--r--tools/perf/util/symbol.h2
3 files changed, 8 insertions, 8 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 36437527dbb3..7dabde14ea54 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -478,7 +478,7 @@ static int __symbol__inc_addr_samples(struct symbol *sym, struct map *map,
478 478
479 pr_debug3("%s: addr=%#" PRIx64 "\n", __func__, map->unmap_ip(map, addr)); 479 pr_debug3("%s: addr=%#" PRIx64 "\n", __func__, map->unmap_ip(map, addr));
480 480
481 if (addr < sym->start || addr > sym->end) 481 if (addr < sym->start || addr >= sym->end)
482 return -ERANGE; 482 return -ERANGE;
483 483
484 offset = addr - sym->start; 484 offset = addr - sym->start;
@@ -836,7 +836,7 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map,
836 end = map__rip_2objdump(map, sym->end); 836 end = map__rip_2objdump(map, sym->end);
837 837
838 offset = line_ip - start; 838 offset = line_ip - start;
839 if ((u64)line_ip < start || (u64)line_ip > end) 839 if ((u64)line_ip < start || (u64)line_ip >= end)
840 offset = -1; 840 offset = -1;
841 else 841 else
842 parsed_line = tmp2 + 1; 842 parsed_line = tmp2 + 1;
@@ -966,7 +966,7 @@ fallback:
966 kce.kcore_filename = symfs_filename; 966 kce.kcore_filename = symfs_filename;
967 kce.addr = map__rip_2objdump(map, sym->start); 967 kce.addr = map__rip_2objdump(map, sym->start);
968 kce.offs = sym->start; 968 kce.offs = sym->start;
969 kce.len = sym->end + 1 - sym->start; 969 kce.len = sym->end - sym->start;
970 if (!kcore_extract__create(&kce)) { 970 if (!kcore_extract__create(&kce)) {
971 delete_extract = true; 971 delete_extract = true;
972 strlcpy(symfs_filename, kce.extract_filename, 972 strlcpy(symfs_filename, kce.extract_filename,
@@ -987,7 +987,7 @@ fallback:
987 disassembler_style ? "-M " : "", 987 disassembler_style ? "-M " : "",
988 disassembler_style ? disassembler_style : "", 988 disassembler_style ? disassembler_style : "",
989 map__rip_2objdump(map, sym->start), 989 map__rip_2objdump(map, sym->start),
990 map__rip_2objdump(map, sym->end+1), 990 map__rip_2objdump(map, sym->end),
991 symbol_conf.annotate_asm_raw ? "" : "--no-show-raw", 991 symbol_conf.annotate_asm_raw ? "" : "--no-show-raw",
992 symbol_conf.annotate_src ? "-S" : "", 992 symbol_conf.annotate_src ? "-S" : "",
993 symfs_filename, filename); 993 symfs_filename, filename);
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index c787a43d529a..078331140d8c 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -186,7 +186,7 @@ void symbols__fixup_end(struct rb_root *symbols)
186 curr = rb_entry(nd, struct symbol, rb_node); 186 curr = rb_entry(nd, struct symbol, rb_node);
187 187
188 if (prev->end == prev->start && prev->end != curr->start) 188 if (prev->end == prev->start && prev->end != curr->start)
189 prev->end = curr->start - 1; 189 prev->end = curr->start;
190 } 190 }
191 191
192 /* Last entry */ 192 /* Last entry */
@@ -229,7 +229,7 @@ struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name)
229 sym = ((void *)sym) + symbol_conf.priv_size; 229 sym = ((void *)sym) + symbol_conf.priv_size;
230 230
231 sym->start = start; 231 sym->start = start;
232 sym->end = len ? start + len - 1 : start; 232 sym->end = len ? start + len : start;
233 sym->binding = binding; 233 sym->binding = binding;
234 sym->namelen = namelen - 1; 234 sym->namelen = namelen - 1;
235 235
@@ -325,7 +325,7 @@ static struct symbol *symbols__find(struct rb_root *symbols, u64 ip)
325 325
326 if (ip < s->start) 326 if (ip < s->start)
327 n = n->rb_left; 327 n = n->rb_left;
328 else if (ip > s->end) 328 else if (ip >= s->end)
329 n = n->rb_right; 329 n = n->rb_right;
330 else 330 else
331 return s; 331 return s;
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index bec4b7bd09de..eb2c19bf8d90 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -95,7 +95,7 @@ void symbols__delete(struct rb_root *symbols);
95 95
96static inline size_t symbol__size(const struct symbol *sym) 96static inline size_t symbol__size(const struct symbol *sym)
97{ 97{
98 return sym->end - sym->start + 1; 98 return sym->end - sym->start;
99} 99}
100 100
101struct strlist; 101struct strlist;