]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
perf annotate browser: Bandaid offsets/jump label objdump ambiguity
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 20 Apr 2012 18:17:50 +0000 (15:17 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 20 Apr 2012 18:17:50 +0000 (15:17 -0300)
We need to cope with things like:

$ objdump  -d --no-show-raw -S -C /lib/modules/3.4.0-rc2+/build/vmlinux
<SNIP>
ffffffff8125ec60 <copy_user_generic_unrolled>:
 * Output:
 * eax uncopied bytes or 0 if successful.
 */
ENTRY(copy_user_generic_unrolled)
CFI_STARTPROC
cmpl $8,%edx
ffffffff8125ec60: cmp    $0x8,%edx
jb 20f /* less then 8 bytes, go to byte copy loop */
ffffffff8125ec63: jb     ffffffff8125ecf5 <copy_user_generic_unrolled+0x95>
ALIGN_DESTINATION
<SNIP>
ffffffff8125ec8d: je     ffffffff8125ecd9 <copy_user_generic_unrolled+0x79>
1: movq (%rsi),%r8
ffffffff8125ec8f: mov    (%rsi),%r8
2: movq 1*8(%rsi),%r9
ffffffff8125ec92: mov    0x8(%rsi),%r9
3: movq 2*8(%rsi),%r10
ffffffff8125ec96: mov    0x10(%rsi),%r10
4: movq 3*8(%rsi),%r11

<SNIP>

Probably expect that the length of the addr field be the same...

Lazy move for now, back to supporting suppressing the address on callq lines...

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-7hp85vnvowpqj8799f8rxbu1@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/ui/browsers/annotate.c

index 9c7b6d87822e894de5e5d8f7b57408daea82156e..c2bbfc767d4f803da8e1fdcdd46db9a2e7ee877f 100644 (file)
@@ -690,7 +690,15 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, int evidx,
                bpos->idx = browser.nr_entries++;
                if (pos->offset != -1) {
                        bpos->idx_asm = browser.nr_asm_entries++;
-                       browser.offsets[pos->offset] = pos;
+                       /*
+                        * FIXME: short term bandaid to cope with assembly
+                        * routines that comes with labels in the same column
+                        * as the address in objdump, sigh.
+                        *
+                        * E.g. copy_user_generic_unrolled
+                        */
+                       if (pos->offset < (s64)size)
+                               browser.offsets[pos->offset] = pos;
                } else
                        bpos->idx_asm = -1;
        }