diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-10-14 16:19:44 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-10-14 16:50:58 -0400 |
commit | 2c241bd35e6f626ad6f867dcf9fefdc2315f125f (patch) | |
tree | d6fd5a27175180423ef19d9c5efd8493f7cef305 /tools/perf/util/symbol.c | |
parent | eba85230de892e2a925c85dca1fe177e8b3d84d8 (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.c | 6 |
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; |