• Namhyung Kim's avatar
    perf dwarf-aux: Check variable address range properly · 0519fadb
    Namhyung Kim authored
    In match_var_offset(), it just checked the end address of the variable
    with the given offset because it assumed the register holds a pointer
    to the data type and the offset starts from the base.
    
    But I found some cases that the stack pointer (rsp = reg7) register is
    used to pointer a stack variable while the frame base is maintained by a
    different register (rbp = reg6).  In that case, it cannot simply use the
    stack pointer as it cannot guarantee that it points to the frame base.
    So it needs to check both boundaries of the variable location.
    
    Before:
      -----------------------------------------------------------
      find data type for 0x7c(reg7) at tcp_getsockopt+0xb62
      CU for net/ipv4/tcp.c (die:0x7b5f516)
      frame base: cfa=0 fbreg=6
      no pointer or no type
      check variable "tss" failed (die: 0x7b95801)
       variable location: base reg7, offset=0x110
       type='struct scm_timestamping_internal' size=0x30 (die:0x7b8c126)
    
    So the current code just checks register number for the non-PC and
    non-FB registers and assuming it has offset 0.  But this variable has
    offset 0x110 so it should not match to this.
    
    After:
      -----------------------------------------------------------
      find data type for 0x7c(reg7) at tcp_getsockopt+0xb62
      CU for net/ipv4/tcp.c (die:0x7b5f516)
      frame base: cfa=0 fbreg=6
      no pointer or no type
      check variable "zc" failed (die: 0x7b9580a)
       variable location: base=reg7, offset=0x40
       type='struct tcp_zerocopy_receive' size=0x40 (die:7b947f4)
    
    Now it find the correct variable "zc".  It was located at reg7 + 0x40
    and the size if 0x40 which means it should cover [0x40, 0x80).  And the
    access was for reg7 + 0x7c so it found the right one.  But it still
    failed to use the variable and it would be handled in the next patch.
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.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: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240412183310.2518474-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0519fadb
dwarf-aux.c 51.7 KB