Skip to content
  • Hou Pengyang's avatar
    arm64: perf: Fix callchain parse error with kernel tracepoint events · 5b09a094
    Hou Pengyang authored
    
    
    For ARM64, when tracing with tracepoint events, the IP and pstate are set
    to 0, preventing the perf code parsing the callchain and resolving the
    symbols correctly.
    
     ./perf record -e sched:sched_switch -g --call-graph dwarf ls
        [ perf record: Captured and wrote 0.146 MB perf.data ]
     ./perf report -f
        Samples: 194  of event 'sched:sched_switch', Event count (approx.): 194
        Children      Self    Command  Shared Object     Symbol
        100.00%       100.00%  ls       [unknown]         [.] 0000000000000000
    
    The fix is to implement perf_arch_fetch_caller_regs for ARM64, which fills
    several necessary registers used for callchain unwinding, including pc,sp,
    fp and spsr .
    
    With this patch, callchain can be parsed correctly as follows:
    
         ......
    +    2.63%     0.00%  ls       [kernel.kallsyms]  [k] vfs_symlink
    +    2.63%     0.00%  ls       [kernel.kallsyms]  [k] follow_down
    +    2.63%     0.00%  ls       [kernel.kallsyms]  [k] pfkey_get
    +    2.63%     0.00%  ls       [kernel.kallsyms]  [k] do_execveat_common.isra.33
    -    2.63%     0.00%  ls       [kernel.kallsyms]  [k] pfkey_send_policy_notify
         pfkey_send_policy_notify
         pfkey_get
         v9fs_vfs_rename
         page_follow_link_light
         link_path_walk
         el0_svc_naked
        .......
    
    Signed-off-by: default avatarHou Pengyang <houpengyang@huawei.com>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    5b09a094