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;
|
print_insn = print_insn_ppc;
|
||||||
#elif defined(__aarch64__) && defined(CONFIG_ARM_A64_DIS)
|
#elif defined(__aarch64__) && defined(CONFIG_ARM_A64_DIS)
|
||||||
print_insn = print_insn_arm_a64;
|
print_insn = print_insn_arm_a64;
|
||||||
|
s.info.cap_arch = CS_ARCH_ARM64;
|
||||||
#elif defined(__alpha__)
|
#elif defined(__alpha__)
|
||||||
print_insn = print_insn_alpha;
|
print_insn = print_insn_alpha;
|
||||||
#elif defined(__sparc__)
|
#elif defined(__sparc__)
|
||||||
@ -457,6 +458,8 @@ void disas(FILE *out, void *code, unsigned long size)
|
|||||||
s.info.mach = bfd_mach_sparc_v9b;
|
s.info.mach = bfd_mach_sparc_v9b;
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
print_insn = print_insn_arm;
|
print_insn = print_insn_arm;
|
||||||
|
s.info.cap_arch = CS_ARCH_ARM;
|
||||||
|
/* TCG only generates code for arm mode. */
|
||||||
#elif defined(__MIPSEB__)
|
#elif defined(__MIPSEB__)
|
||||||
print_insn = print_insn_big_mips;
|
print_insn = print_insn_big_mips;
|
||||||
#elif defined(__MIPSEL__)
|
#elif defined(__MIPSEL__)
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "sysemu/hw_accel.h"
|
#include "sysemu/hw_accel.h"
|
||||||
#include "kvm_arm.h"
|
#include "kvm_arm.h"
|
||||||
|
#include "disas/capstone.h"
|
||||||
|
|
||||||
static void arm_cpu_set_pc(CPUState *cs, vaddr value)
|
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)
|
#if defined(CONFIG_ARM_A64_DIS)
|
||||||
info->print_insn = print_insn_arm_a64;
|
info->print_insn = print_insn_arm_a64;
|
||||||
#endif
|
#endif
|
||||||
} else if (env->thumb) {
|
info->cap_arch = CS_ARCH_ARM64;
|
||||||
info->print_insn = print_insn_thumb1;
|
|
||||||
} else {
|
} 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);
|
sctlr_b = arm_sctlr_b(env);
|
||||||
|
Loading…
Reference in New Issue
Block a user