mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
perf annotate-data: Add get_global_var_type()
Accessing global variable is common when it tracks execution later. Factor out the common code into a function for later use. It adds thread and cpumode to struct data_loc_info to find (global) symbols if needed. Also remove var_name as it's retrieved in the helper function. Signed-off-by: Namhyung 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> Link: https://lore.kernel.org/r/20240319055115.4063940-12-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
4f903455be
commit
1ebb5e17ef
@@ -3873,9 +3873,11 @@ retry:
|
||||
for_each_insn_op_loc(&loc, i, op_loc) {
|
||||
struct data_loc_info dloc = {
|
||||
.arch = arch,
|
||||
.thread = he->thread,
|
||||
.ms = ms,
|
||||
/* Recalculate IP for LOCK prefix or insn fusion */
|
||||
.ip = ms->sym->start + dl->al.offset,
|
||||
.cpumode = he->cpumode,
|
||||
.op = op_loc,
|
||||
};
|
||||
|
||||
@@ -3887,23 +3889,8 @@ retry:
|
||||
|
||||
/* PC-relative addressing */
|
||||
if (op_loc->reg1 == DWARF_REG_PC) {
|
||||
struct addr_location al;
|
||||
struct symbol *var;
|
||||
u64 map_addr;
|
||||
|
||||
dloc.var_addr = annotate_calc_pcrel(ms, ip, op_loc->offset, dl);
|
||||
/* Kernel symbols might be relocated */
|
||||
map_addr = dloc.var_addr + map__reloc(ms->map);
|
||||
|
||||
addr_location__init(&al);
|
||||
var = thread__find_symbol_fb(he->thread, he->cpumode,
|
||||
map_addr, &al);
|
||||
if (var) {
|
||||
dloc.var_name = var->name;
|
||||
/* Calculate type offset from the start of variable */
|
||||
dloc.type_offset = map_addr - map__unmap_ip(al.map, var->start);
|
||||
}
|
||||
addr_location__exit(&al);
|
||||
dloc.var_addr = annotate_calc_pcrel(ms, dloc.ip,
|
||||
op_loc->offset, dl);
|
||||
}
|
||||
|
||||
mem_type = find_data_type(&dloc);
|
||||
|
||||
Reference in New Issue
Block a user