arm: Support Capstone in disas_set_info
Tested-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b666d2a41a
commit
110f6c703b
3
disas.c
3
disas.c
@ -450,6 +450,7 @@ void disas(FILE *out, void *code, unsigned long size)
|
||||
print_insn = print_insn_ppc;
|
||||
#elif defined(__aarch64__) && defined(CONFIG_ARM_A64_DIS)
|
||||
print_insn = print_insn_arm_a64;
|
||||
s.info.cap_arch = CS_ARCH_ARM64;
|
||||
#elif defined(__alpha__)
|
||||
print_insn = print_insn_alpha;
|
||||
#elif defined(__sparc__)
|
||||
@ -457,6 +458,8 @@ void disas(FILE *out, void *code, unsigned long size)
|
||||
s.info.mach = bfd_mach_sparc_v9b;
|
||||
#elif defined(__arm__)
|
||||
print_insn = print_insn_arm;
|
||||
s.info.cap_arch = CS_ARCH_ARM;
|
||||
/* TCG only generates code for arm mode. */
|
||||
#elif defined(__MIPSEB__)
|
||||
print_insn = print_insn_big_mips;
|
||||
#elif defined(__MIPSEL__)
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "sysemu/hw_accel.h"
|
||||
#include "kvm_arm.h"
|
||||
#include "disas/capstone.h"
|
||||
|
||||
static void arm_cpu_set_pc(CPUState *cs, vaddr value)
|
||||
{
|
||||
@ -487,10 +488,24 @@ static void arm_disas_set_info(CPUState *cpu, disassemble_info *info)
|
||||
#if defined(CONFIG_ARM_A64_DIS)
|
||||
info->print_insn = print_insn_arm_a64;
|
||||
#endif
|
||||
} else if (env->thumb) {
|
||||
info->print_insn = print_insn_thumb1;
|
||||
info->cap_arch = CS_ARCH_ARM64;
|
||||
} else {
|
||||
info->print_insn = print_insn_arm;
|
||||
int cap_mode;
|
||||
if (env->thumb) {
|
||||
info->print_insn = print_insn_thumb1;
|
||||
cap_mode = CS_MODE_THUMB;
|
||||
} else {
|
||||
info->print_insn = print_insn_arm;
|
||||
cap_mode = CS_MODE_ARM;
|
||||
}
|
||||
if (arm_feature(env, ARM_FEATURE_V8)) {
|
||||
cap_mode |= CS_MODE_V8;
|
||||
}
|
||||
if (arm_feature(env, ARM_FEATURE_M)) {
|
||||
cap_mode |= CS_MODE_MCLASS;
|
||||
}
|
||||
info->cap_arch = CS_ARCH_ARM;
|
||||
info->cap_mode = cap_mode;
|
||||
}
|
||||
|
||||
sctlr_b = arm_sctlr_b(env);
|
||||
|
Loading…
Reference in New Issue
Block a user