aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/symbol.c
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/perf/util/symbol.c
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/perf/util/symbol.c')
-rw-r--r--tools/perf/util/symbol.c6
1 files changed, 3 insertions, 3 deletions
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;