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

Reply via email to