[PATCH v3 5/7] perf annotate: Get correct line numbers matched with addr

From: Taeung Song
Date: Thu Mar 09 2017 - 12:38:45 EST


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 <namhyung@xxxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Signed-off-by: Taeung Song <treeze.taeung@xxxxxxxxx>
---
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