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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent eba85230
...@@ -478,7 +478,7 @@ static int __symbol__inc_addr_samples(struct symbol *sym, struct map *map, ...@@ -478,7 +478,7 @@ static int __symbol__inc_addr_samples(struct symbol *sym, struct map *map,
pr_debug3("%s: addr=%#" PRIx64 "\n", __func__, map->unmap_ip(map, addr)); pr_debug3("%s: addr=%#" PRIx64 "\n", __func__, map->unmap_ip(map, addr));
if (addr < sym->start || addr > sym->end) if (addr < sym->start || addr >= sym->end)
return -ERANGE; return -ERANGE;
offset = addr - sym->start; offset = addr - sym->start;
...@@ -836,7 +836,7 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map, ...@@ -836,7 +836,7 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map,
end = map__rip_2objdump(map, sym->end); end = map__rip_2objdump(map, sym->end);
offset = line_ip - start; offset = line_ip - start;
if ((u64)line_ip < start || (u64)line_ip > end) if ((u64)line_ip < start || (u64)line_ip >= end)
offset = -1; offset = -1;
else else
parsed_line = tmp2 + 1; parsed_line = tmp2 + 1;
...@@ -966,7 +966,7 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize) ...@@ -966,7 +966,7 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize)
kce.kcore_filename = symfs_filename; kce.kcore_filename = symfs_filename;
kce.addr = map__rip_2objdump(map, sym->start); kce.addr = map__rip_2objdump(map, sym->start);
kce.offs = sym->start; kce.offs = sym->start;
kce.len = sym->end + 1 - sym->start; kce.len = sym->end - sym->start;
if (!kcore_extract__create(&kce)) { if (!kcore_extract__create(&kce)) {
delete_extract = true; delete_extract = true;
strlcpy(symfs_filename, kce.extract_filename, strlcpy(symfs_filename, kce.extract_filename,
...@@ -987,7 +987,7 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize) ...@@ -987,7 +987,7 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize)
disassembler_style ? "-M " : "", disassembler_style ? "-M " : "",
disassembler_style ? disassembler_style : "", disassembler_style ? disassembler_style : "",
map__rip_2objdump(map, sym->start), map__rip_2objdump(map, sym->start),
map__rip_2objdump(map, sym->end+1), map__rip_2objdump(map, sym->end),
symbol_conf.annotate_asm_raw ? "" : "--no-show-raw", symbol_conf.annotate_asm_raw ? "" : "--no-show-raw",
symbol_conf.annotate_src ? "-S" : "", symbol_conf.annotate_src ? "-S" : "",
symfs_filename, filename); symfs_filename, filename);
......
...@@ -186,7 +186,7 @@ void symbols__fixup_end(struct rb_root *symbols) ...@@ -186,7 +186,7 @@ void symbols__fixup_end(struct rb_root *symbols)
curr = rb_entry(nd, struct symbol, rb_node); curr = rb_entry(nd, struct symbol, rb_node);
if (prev->end == prev->start && prev->end != curr->start) if (prev->end == prev->start && prev->end != curr->start)
prev->end = curr->start - 1; prev->end = curr->start;
} }
/* Last entry */ /* Last entry */
...@@ -229,7 +229,7 @@ struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name) ...@@ -229,7 +229,7 @@ struct symbol *symbol__new(u64 start, u64 len, u8 binding, const char *name)
sym = ((void *)sym) + symbol_conf.priv_size; sym = ((void *)sym) + symbol_conf.priv_size;
sym->start = start; sym->start = start;
sym->end = len ? start + len - 1 : start; sym->end = len ? start + len : start;
sym->binding = binding; sym->binding = binding;
sym->namelen = namelen - 1; sym->namelen = namelen - 1;
...@@ -325,7 +325,7 @@ static struct symbol *symbols__find(struct rb_root *symbols, u64 ip) ...@@ -325,7 +325,7 @@ static struct symbol *symbols__find(struct rb_root *symbols, u64 ip)
if (ip < s->start) if (ip < s->start)
n = n->rb_left; n = n->rb_left;
else if (ip > s->end) else if (ip >= s->end)
n = n->rb_right; n = n->rb_right;
else else
return s; return s;
......
...@@ -95,7 +95,7 @@ void symbols__delete(struct rb_root *symbols); ...@@ -95,7 +95,7 @@ void symbols__delete(struct rb_root *symbols);
static inline size_t symbol__size(const struct symbol *sym) static inline size_t symbol__size(const struct symbol *sym)
{ {
return sym->end - sym->start + 1; return sym->end - sym->start;
} }
struct strlist; struct strlist;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment