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/annotate.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/annotate.c')
-rw-r--r-- | tools/perf/util/annotate.c | 8 |
1 files changed, 4 insertions, 4 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); |