• Namhyung Kim's avatar
    perf annotate-data: Add find_data_type() to get type from memory access · b9c87f53
    Namhyung Kim authored
    The find_data_type() is to get a data type from the memory access at the
    given address (IP) using a register and an offset.
    
    It requires DWARF debug info in the DSO and searches the list of
    variables and function parameters in the scope.
    
    In a pseudo code, it does basically the following:
    
      find_data_type(dso, ip, reg, offset)
      {
          pc = map__rip_2objdump(ip);
          CU = dwarf_addrdie(dso->dwarf, pc);
          scopes = die_get_scopes(CU, pc);
          for_each_scope(S, scopes) {
              V = die_find_variable_by_reg(S, pc, reg);
              if (V && V.type == pointer_type) {
                  T = die_get_real_type(V);
                  if (offset < T.size)
                      return T;
              }
          }
          return NULL;
      }
    
    Committer notes:
    
    The 'size' variable in check_variable() is 64-bit, so use PRIu64 and
    inttypes.h to debug it.
    
    Ditto at find_data_type_die().
    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: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: linux-toolchains@vger.kernel.org
    Cc: linux-trace-devel@vger.kernel.org
    Link: https://lore.kernel.org/r/20231213001323.718046-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b9c87f53
Build 11.8 KB