• Namhyung Kim's avatar
    perf annotate-data: Fix percpu pointer check · 4d6d6e0f
    Namhyung Kim authored
    In check_matching_type(), it checks the type state of the register in a
    wrong order.  When it's the percpu pointer, it should check the type for
    the pointer, but it checks the CFA bit first and thought it has no type
    in the stack slot.  This resulted in no type info.
    
      -----------------------------------------------------------
      find data type for 0x28(reg1) at hrtimer_reprogram+0x88
      CU for kernel/time/hrtimer.c (die:0x18f219f)
      frame base: cfa=1 fbreg=7
      ...
      add [72] percpu 0x24500 -> reg1 pointer type='struct hrtimer_cpu_base' size=0x240 (die:0x18f6d46)
      bb: [7a - 7e]
      bb: [80 - 86]                        (here)
      bb: [88 - 88]                         vvv
      chk [88] reg1 offset=0x28 ok=1 kind=4 cfa : no type information
      no type information
    
    Here, instruction at 0x72 found reg1 has a (percpu) pointer and got the
    correct type.  But when it checks the final result, it wrongly thought
    it was stack variable because it checks the cfa bit first.
    
    After changing the order of state check:
      -----------------------------------------------------------
      find data type for 0x28(reg1) at hrtimer_reprogram+0x88
      CU for kernel/time/hrtimer.c (die:0x18f219f)
      frame base: cfa=1 fbreg=7
      ...                                     (here)
                                            vvvvvvvvvv
      chk [88] reg1 offset=0x28 ok=1 kind=4 percpu ptr : Good!
      found by insn track: 0x28(reg1) type-offset=0x28
      final type: type='struct hrtimer_cpu_base' size=0x240 (die:0x18f6d46)
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240821065408.285548-3-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    4d6d6e0f
instructions.c 16.8 KB