mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
perf annotate-data: Expand type_state_reg imm_value to u64
The arm64 'adrp + add/ldr' instruction pair involves global variable address calculation and passing, which requires storing the 64-bit address in type_state_reg. Currently, there is no field in type_state_reg that can hold such an address. The most likely candidate for reuse is imm_value, but it is defined as u32, which limits the size of values it can carry. To address this, expand imm_value from u32 to u64. Also update related compilation warnings and fix the sign-extension issue introduced by this change. Reviewed-by: Ian Rogers <irogers@google.com> Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Tengda Wu <wutengda@huaweicloud.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f9b51a42dd
commit
4043104984
|
|
@ -536,11 +536,11 @@ static void update_insn_state_x86(struct type_state *state,
|
|||
|
||||
if (src->imm) {
|
||||
tsr->kind = TSR_KIND_CONST;
|
||||
tsr->imm_value = src->offset;
|
||||
tsr->imm_value = (s64)src->offset;
|
||||
tsr->offset = 0;
|
||||
tsr->ok = true;
|
||||
|
||||
pr_debug_dtp("mov [%x] imm=%#x -> reg%d\n",
|
||||
pr_debug_dtp("mov [%x] imm=%#"PRIx64" -> reg%d\n",
|
||||
insn_offset, tsr->imm_value, dst->reg1);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ extern struct annotated_data_stat ann_data_stat;
|
|||
*/
|
||||
struct type_state_reg {
|
||||
Dwarf_Die type;
|
||||
u32 imm_value;
|
||||
u64 imm_value;
|
||||
/*
|
||||
* The offset within the struct that the register points to.
|
||||
* A value of 0 means the register points to the beginning.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user