perf annotate: Add --type-stat option for debugging

The --type-stat option is to be used with --data-type and to print
detailed failure reasons for the data type annotation.

  $ perf annotate --data-type --type-stat
  Annotate data type stats:
  total 294, ok 116 (39.5%), bad 178 (60.5%)
  -----------------------------------------------------------
          30 : no_sym
          40 : no_insn_ops
          33 : no_mem_ops
          63 : no_var
           4 : no_typeinfo
           8 : bad_offset

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
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-17-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Namhyung Kim
2023-12-12 16:13:22 -08:00
committed by Arnaldo Carvalho de Melo
parent 227ad32385
commit 61a9741e9f
5 changed files with 109 additions and 8 deletions
+31
View File
@@ -70,6 +70,37 @@ struct annotated_data_type {
extern struct annotated_data_type unknown_type;
/**
* struct annotated_data_stat - Debug statistics
* @total: Total number of entry
* @no_sym: No symbol or map found
* @no_insn: Failed to get disasm line
* @no_insn_ops: The instruction has no operands
* @no_mem_ops: The instruction has no memory operands
* @no_reg: Failed to extract a register from the operand
* @no_dbginfo: The binary has no debug information
* @no_cuinfo: Failed to find a compile_unit
* @no_var: Failed to find a matching variable
* @no_typeinfo: Failed to get a type info for the variable
* @invalid_size: Failed to get a size info of the type
* @bad_offset: The access offset is out of the type
*/
struct annotated_data_stat {
int total;
int no_sym;
int no_insn;
int no_insn_ops;
int no_mem_ops;
int no_reg;
int no_dbginfo;
int no_cuinfo;
int no_var;
int no_typeinfo;
int invalid_size;
int bad_offset;
};
extern struct annotated_data_stat ann_data_stat;
#ifdef HAVE_DWARF_SUPPORT
/* Returns data type at the location (ip, reg, offset) */