• Jin Yao's avatar
    perf report: Support interactive annotation of code without symbols · 7b0a0dcb
    Jin Yao authored
    For perf report on stripped binaries it is currently impossible to do
    annotation. The annotation state is all tied to symbols, but there are
    either no symbols, or symbols are not covering all the code.
    
    We should support the annotation functionality even without symbols.
    
    This patch fakes a symbol and the symbol name is the string of address.
    After that, we just follow current annotation working flow.
    
    For example,
    
    1. perf report
    
      Overhead  Command  Shared Object     Symbol
        20.67%  div      libc-2.27.so      [.] __random_r
        17.29%  div      libc-2.27.so      [.] __random
        10.59%  div      div               [.] 0x0000000000000628
         9.25%  div      div               [.] 0x0000000000000612
         6.11%  div      div               [.] 0x0000000000000645
    
    2. Select the line of "10.59%  div      div               [.] 0x0000000000000628" and ENTER.
    
      Annotate 0x0000000000000628
      Zoom into div thread
      Zoom into div DSO (use the 'k' hotkey to zoom directly into the kernel)
      Browse map details
      Run scripts for samples of symbol [0x0000000000000628]
      Run scripts for all samples
      Switch to another data file in PWD
      Exit
    
    3. Select the "Annotate 0x0000000000000628" and ENTER.
    
    Percent│
           │
           │
           │     Disassembly of section .text:
           │
           │     0000000000000628 <.text+0x68>:
           │       divsd %xmm4,%xmm0
           │       divsd %xmm3,%xmm1
           │       movsd (%rsp),%xmm2
           │       addsd %xmm1,%xmm0
           │       addsd %xmm2,%xmm0
           │       movsd %xmm0,(%rsp)
    
    Now we can see the dump of object starting from 0x628.
    
     v5:
     ---
     Remove the hotkey 'a' implementation from this patch. It
     will be moved to a separate patch.
    
     v4:
     ---
     1. Support the hotkey 'a'. When we press 'a' on address,
        now it supports the annotation.
    
     2. Change the patch title from
        "Support interactive annotation of code without symbols" to
        "perf report: Support interactive annotation of code without symbols"
    
     v3:
     ---
     Keep just the ANNOTATION_DUMMY_LEN, and remove the
     opts->annotate_dummy_len since it's the "maybe in future
     we will provide" feature.
    
     v2:
     ---
     Fix a crash issue when annotating an address in "unknown" object.
    
     The steps to reproduce this issue:
    
     perf record -e cycles:u ls
     perf report
    
        75.29%  ls       ld-2.27.so        [.] do_lookup_x
        23.64%  ls       ld-2.27.so        [.] __GI___tunables_init
         1.04%  ls       [unknown]         [k] 0xffffffff85c01210
         0.03%  ls       ld-2.27.so        [.] _start
    
     When annotating 0xffffffff85c01210, the crash happens.
    
     v2 adds checking for ms->map in add_annotate_opt(). If the object is
     "unknown", ms->map is NULL.
    
    Committer notes:
    
    Renamed new_annotate_sym() to symbol__new_unresolved().
    
    Use PRIx64 to fix this issue in some 32-bit arches:
    
      ui/browsers/hists.c: In function 'symbol__new_unresolved':
      ui/browsers/hists.c:2474:38: error: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'u64' {aka 'long long unsigned int'} [-Werror=format=]
        snprintf(name, sizeof(name), "%-#.*lx", BITS_PER_LONG / 4, addr);
                                      ~~~~~~^                      ~~~~
                                      %-#.*llx
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lore.kernel.org/lkml/20200227043939.4403-3-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    7b0a0dcb
hists.c 91.4 KB