Currently perf-annotate show wrong line numbers. For example, Actual source code is as below
... 21 }; 22 23 unsigned int limited_wgt; 24 25 unsigned int get_cond_maxprice(int wgt) 26 { ... However, the output of perf-annotate is as below. 4 Disassembly of section .text: 6 0000000000400966 <get_cond_maxprice>: 7 get_cond_maxprice(): 26 }; 28 unsigned int limited_wgt; 30 unsigned int get_cond_maxprice(int wgt) 31 { So remove the wrong way counting line numbers and match correct line numbers to each addr of asm lines Cc: Namhyung Kim <namhy...@kernel.org> Cc: Jiri Olsa <jo...@redhat.com> Signed-off-by: Taeung Song <treeze.tae...@gmail.com> --- tools/perf/util/annotate.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index e49eb7e..a50d949 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -823,11 +823,11 @@ static struct disasm_line *disasm_line__new(s64 offset, char *line, if (dl != NULL) { dl->offset = offset; dl->line = strdup(line); - dl->line_nr = line_nr; if (dl->line == NULL) goto out_delete; if (offset != -1) { + dl->line_nr = line_nr; if (disasm_line__parse(dl->line, &dl->ins.name, &dl->ops.raw) < 0) goto out_free_line; @@ -1207,7 +1207,6 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map, dl = disasm_line__new(offset, parsed_line, privsize, *line_nr, arch, map); free(line); - (*line_nr)++; if (dl == NULL) return -1; -- 2.7.4