• Ravi Bangoria's avatar
    perf annotate: Fix jump target outside of function address range · e216874c
    Ravi Bangoria authored
    If jump target is outside of function range, perf is not handling it
    correctly. Especially when target address is lesser than function start
    address, target offset will be negative. But, target address declared to
    be unsigned, converts negative number into 2's complement. See below
    example. Here target of 'jumpq' instruction at 34cf8 is 34ac0 which is
    lesser than function start address(34cf0).
    
            34ac0 - 34cf0 = -0x230 = 0xfffffffffffffdd0
    
    Objdump output:
    
      0000000000034cf0 <__sigaction>:
      __GI___sigaction():
        34cf0: lea    -0x20(%rdi),%eax
        34cf3: cmp    -bashx1,%eax
        34cf6: jbe    34d00 <__sigaction+0x10>
        34cf8: jmpq   34ac0 <__GI___libc_sigaction>
        34cfd: nopl   (%rax)
        34d00: mov    0x386161(%rip),%rax        # 3bae68 <_DYNAMIC+0x2e8>
        34d07: movl   -bashx16,%fs:(%rax)
        34d0e: mov    -bashxffffffff,%eax
        34d13: retq
    
    perf annotate before applying patch:
    
      __GI___sigaction  /usr/lib64/libc-2.22.so
               lea    -0x20(%rdi),%eax
               cmp    -bashx1,%eax
            v  jbe    10
            v  jmpq   fffffffffffffdd0
               nop
        10:    mov    _DYNAMIC+0x2e8,%rax
               movl   -bashx16,%fs:(%rax)
               mov    -bashxffffffff,%eax
               retq
    
    perf annotate after applying patch:
    
      __GI___sigaction  /usr/lib64/libc-2.22.so
               lea    -0x20(%rdi),%eax
               cmp    -bashx1,%eax
            v  jbe    10
            ^  jmpq   34ac0 <__GI___libc_sigaction>
               nop
        10:    mov    _DYNAMIC+0x2e8,%rax
               movl   -bashx16,%fs:(%rax)
               mov    -bashxffffffff,%eax
               retq
    Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Chris Riyder <chris.ryder@arm.com>
    Cc: Kim Phillips <kim.phillips@arm.com>
    Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Taeung Song <treeze.taeung@gmail.com>
    Cc: linuxppc-dev@lists.ozlabs.org
    Link: http://lkml.kernel.org/r/1480953407-7605-3-git-send-email-ravi.bangoria@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    e216874c
annotate.c 30.2 KB