mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
perf disasm: Add e_machine/e_flags to struct arch
Currently functions like get_dwarf_regnum only work with the host architecture. Carry the elf machine and flags in struct arch so that in disassembly these can be used to allow cross platform disassembly. Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Ian Rogers <irogers@google.com> Cc: Anup Patel <anup@brainfault.org> Cc: Yang Jihong <yangjihong@bytedance.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: David S. Miller <davem@davemloft.net> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Shenlin Liang <liangshenlin@eswincomputing.com> Cc: Nick Terrell <terrelln@fb.com> Cc: Guilherme Amadio <amadio@gentoo.org> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Changbin Du <changbin.du@huawei.com> Cc: Alexander Lobakin <aleksander.lobakin@intel.com> Cc: Przemek Kitszel <przemyslaw.kitszel@intel.com> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: Guo Ren <guoren@kernel.org> Cc: Masahiro Yamada <masahiroy@kernel.org> Cc: Will Deacon <will@kernel.org> Cc: James Clark <james.clark@linaro.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Chen Pei <cp0613@linux.alibaba.com> Cc: Leo Yan <leo.yan@linux.dev> Cc: Oliver Upton <oliver.upton@linux.dev> Cc: Aditya Gupta <adityag@linux.ibm.com> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-riscv@lists.infradead.org Cc: Bibo Mao <maobibo@loongson.cn> Cc: John Garry <john.g.garry@oracle.com> Cc: Atish Patra <atishp@rivosinc.com> Cc: Dima Kogan <dima@secretsauce.net> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Dr. David Alan Gilbert <linux@treblig.org> Cc: linux-csky@vger.kernel.org Link: https://lore.kernel.org/r/20241108234606.429459-5-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
@@ -5,5 +5,7 @@ static int arc__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
{
|
||||
arch->initialized = true;
|
||||
arch->objdump.comment_char = ';';
|
||||
arch->e_machine = EM_ARC;
|
||||
arch->e_flags = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ static int arm__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = arm__associate_instruction_ops;
|
||||
arch->objdump.comment_char = ';';
|
||||
arch->objdump.skip_functions_char = '+';
|
||||
arch->e_machine = EM_ARM;
|
||||
arch->e_flags = 0;
|
||||
return 0;
|
||||
|
||||
out_free_call:
|
||||
|
||||
@@ -113,6 +113,8 @@ static int arm64__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = arm64__associate_instruction_ops;
|
||||
arch->objdump.comment_char = '/';
|
||||
arch->objdump.skip_functions_char = '+';
|
||||
arch->e_machine = EM_AARCH64;
|
||||
arch->e_flags = 0;
|
||||
return 0;
|
||||
|
||||
out_free_call:
|
||||
|
||||
@@ -43,6 +43,11 @@ static int csky__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->initialized = true;
|
||||
arch->objdump.comment_char = '/';
|
||||
arch->associate_instruction_ops = csky__associate_ins_ops;
|
||||
|
||||
arch->e_machine = EM_CSKY;
|
||||
#if defined(__CSKYABIV2__)
|
||||
arch->e_flags = EF_CSKY_ABIV2;
|
||||
#else
|
||||
arch->e_flags = EF_CSKY_ABIV1;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -131,6 +131,8 @@ int loongarch__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = loongarch__associate_ins_ops;
|
||||
arch->initialized = true;
|
||||
arch->objdump.comment_char = '#';
|
||||
arch->e_machine = EM_LOONGARCH;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -40,6 +40,8 @@ int mips__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = mips__associate_ins_ops;
|
||||
arch->initialized = true;
|
||||
arch->objdump.comment_char = '#';
|
||||
arch->e_machine = EM_MIPS;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -309,6 +309,8 @@ static int powerpc__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = powerpc__associate_instruction_ops;
|
||||
arch->objdump.comment_char = '#';
|
||||
annotate_opts.show_asm_raw = true;
|
||||
arch->e_machine = EM_PPC;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -28,6 +28,8 @@ int riscv64__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->associate_instruction_ops = riscv64__associate_ins_ops;
|
||||
arch->initialized = true;
|
||||
arch->objdump.comment_char = '#';
|
||||
arch->e_machine = EM_RISCV;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -166,6 +166,8 @@ static int s390__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
if (s390__cpuid_parse(arch, cpuid))
|
||||
err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
|
||||
}
|
||||
arch->e_machine = EM_S390;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
@@ -163,6 +163,8 @@ static int sparc__annotate_init(struct arch *arch, char *cpuid __maybe_unused)
|
||||
arch->initialized = true;
|
||||
arch->associate_instruction_ops = sparc__associate_instruction_ops;
|
||||
arch->objdump.comment_char = '#';
|
||||
arch->e_machine = EM_SPARC;
|
||||
arch->e_flags = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -202,7 +202,8 @@ static int x86__annotate_init(struct arch *arch, char *cpuid)
|
||||
if (x86__cpuid_parse(arch, cpuid))
|
||||
err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING;
|
||||
}
|
||||
|
||||
arch->e_machine = EM_X86_64;
|
||||
arch->e_flags = 0;
|
||||
arch->initialized = true;
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,10 @@ struct arch {
|
||||
struct data_loc_info *dloc, Dwarf_Die *cu_die,
|
||||
struct disasm_line *dl);
|
||||
#endif
|
||||
/** @e_machine: ELF machine associated with arch. */
|
||||
unsigned int e_machine;
|
||||
/** @e_flags: Optional ELF flags associated with arch. */
|
||||
unsigned int e_flags;
|
||||
};
|
||||
|
||||
struct ins {
|
||||
|
||||
Reference in New Issue
Block a user