diff --git a/arch/ARM/ARMModule.c b/arch/ARM/ARMModule.c index 4fe40422..ef880747 100644 --- a/arch/ARM/ARMModule.c +++ b/arch/ARM/ARMModule.c @@ -37,7 +37,7 @@ cs_err ARM_option(cs_struct *handle, cs_opt_type type, size_t value) { switch (type) { case CS_OPT_MODE: - handle->mode = (cs_mode)value; + handle->mode |= (cs_mode)value; break; case CS_OPT_SYNTAX: handle->syntax |= (int)value; diff --git a/cstool/cstool.c b/cstool/cstool.c index c7b9b054..8bbdf0a8 100644 --- a/cstool/cstool.c +++ b/cstool/cstool.c @@ -47,6 +47,12 @@ static struct { CS_ARCH_MIPS, CS_ARCH_MAX }, 0, CS_MODE_MIPS_NOFLOAT }, { "+ptr64", "Enables 64-bit pointers support", { CS_ARCH_MIPS, CS_ARCH_MAX }, 0, CS_MODE_MIPS_PTR64 }, + { "+thumb", "Enables Thumb mode for ARM.", { + CS_ARCH_ARM, CS_ARCH_MAX }, 0, CS_MODE_THUMB }, + { "+m", "Enables the M extension for ARM.", { + CS_ARCH_ARM, CS_ARCH_MAX }, 0, CS_MODE_MCLASS }, + { "+v8", "Sets the ARM version to v8+", { + CS_ARCH_ARM, CS_ARCH_MAX }, 0, CS_MODE_V8 }, { "+aix", "Enables AIX OS assembly", { CS_ARCH_PPC, CS_ARCH_MAX }, 0, CS_MODE_AIX_OS }, { "+booke", "Enables BOOKE extension", { @@ -73,15 +79,6 @@ static struct { { "arm", "ARM, little endian", CS_ARCH_ARM, CS_MODE_ARM }, { "armle", "ARM, little endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_LITTLE_ENDIAN }, { "armbe", "ARM, big endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_BIG_ENDIAN }, - { "armv8", "ARM v8", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_V8 }, - { "armv8be", "ARM v8, big endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_V8 | CS_MODE_BIG_ENDIAN }, - { "cortexm", "ARM Cortex-M Thumb", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_MCLASS }, - { "cortexmv8", "ARM Cortex-M Thumb, v8", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_MCLASS | CS_MODE_V8 }, - { "thumb", "ARM Thumb mode, little endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB }, - { "thumble", "ARM Thumb mode, little endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_LITTLE_ENDIAN }, - { "thumbbe", "ARM Thumb mode, big endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_BIG_ENDIAN }, - { "thumbv8", "ARM Thumb v8", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_V8 }, - { "thumbv8be", "ARM Thumb v8, big endian", CS_ARCH_ARM, CS_MODE_ARM | CS_MODE_THUMB | CS_MODE_V8 | CS_MODE_BIG_ENDIAN }, { "aarch64", "AArch64", CS_ARCH_AARCH64, CS_MODE_LITTLE_ENDIAN }, { "aarch64be", "AArch64, big endian", CS_ARCH_AARCH64, CS_MODE_BIG_ENDIAN },