mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 05:25:31 +00:00
Expose different 32-bit ARM CPU models to users via UC_MODE flags (#1165)
Backports commit ba745521991429b76b93180dca70c294c6b343cf from unicorn.
This commit is contained in:
parent
b1f5794ab4
commit
55a3c5a4a5
|
@ -14,7 +14,8 @@
|
||||||
|
|
||||||
// These are masks of supported modes for each cpu/arch.
|
// These are masks of supported modes for each cpu/arch.
|
||||||
// They should be updated when changes are made to the uc_mode enum typedef.
|
// They should be updated when changes are made to the uc_mode enum typedef.
|
||||||
#define UC_MODE_ARM_MASK (UC_MODE_ARM|UC_MODE_THUMB|UC_MODE_LITTLE_ENDIAN|UC_MODE_MCLASS|UC_MODE_BIG_ENDIAN)
|
#define UC_MODE_ARM_MASK (UC_MODE_ARM|UC_MODE_THUMB|UC_MODE_LITTLE_ENDIAN|UC_MODE_MCLASS | \
|
||||||
|
UC_MODE_ARM926|UC_MODE_ARM946|UC_MODE_ARM1176|UC_MODE_BIG_ENDIAN)
|
||||||
#define UC_MODE_M68K_MASK (UC_MODE_BIG_ENDIAN)
|
#define UC_MODE_M68K_MASK (UC_MODE_BIG_ENDIAN)
|
||||||
#define UC_MODE_MIPS_MASK (UC_MODE_MIPS32|UC_MODE_MIPS64|UC_MODE_LITTLE_ENDIAN|UC_MODE_BIG_ENDIAN)
|
#define UC_MODE_MIPS_MASK (UC_MODE_MIPS32|UC_MODE_MIPS64|UC_MODE_LITTLE_ENDIAN|UC_MODE_BIG_ENDIAN)
|
||||||
#define UC_MODE_PPC_MASK (UC_MODE_PPC64|UC_MODE_BIG_ENDIAN)
|
#define UC_MODE_PPC_MASK (UC_MODE_PPC64|UC_MODE_BIG_ENDIAN)
|
||||||
|
|
|
@ -104,31 +104,43 @@ typedef enum uc_arch {
|
||||||
typedef enum uc_mode {
|
typedef enum uc_mode {
|
||||||
UC_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode)
|
UC_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode)
|
||||||
UC_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode
|
UC_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode
|
||||||
|
|
||||||
// arm / arm64
|
// arm / arm64
|
||||||
UC_MODE_ARM = 0, // ARM mode
|
UC_MODE_ARM = 0, // ARM mode
|
||||||
UC_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2)
|
UC_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2)
|
||||||
UC_MODE_MCLASS = 1 << 5, // ARM's Cortex-M series (currently unsupported)
|
UC_MODE_MCLASS = 1 << 5, // ARM's Cortex-M series (currently unsupported)
|
||||||
UC_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM (currently unsupported)
|
UC_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM (currently unsupported)
|
||||||
|
|
||||||
|
// arm (32bit) cpu types
|
||||||
|
UC_MODE_ARM926 = 1 << 7, // ARM926 CPU type
|
||||||
|
UC_MODE_ARM946 = 1 << 8, // ARM946 CPU type
|
||||||
|
UC_MODE_ARM1176 = 1 << 9, // ARM1176 CPU type
|
||||||
|
|
||||||
// mips
|
// mips
|
||||||
UC_MODE_MICRO = 1 << 4, // MicroMips mode (currently unsupported)
|
UC_MODE_MICRO = 1 << 4, // MicroMips mode (currently unsupported)
|
||||||
UC_MODE_MIPS3 = 1 << 5, // Mips III ISA (currently unsupported)
|
UC_MODE_MIPS3 = 1 << 5, // Mips III ISA (currently unsupported)
|
||||||
UC_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA (currently unsupported)
|
UC_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA (currently unsupported)
|
||||||
UC_MODE_MIPS32 = 1 << 2, // Mips32 ISA
|
UC_MODE_MIPS32 = 1 << 2, // Mips32 ISA
|
||||||
UC_MODE_MIPS64 = 1 << 3, // Mips64 ISA
|
UC_MODE_MIPS64 = 1 << 3, // Mips64 ISA
|
||||||
|
|
||||||
// x86 / x64
|
// x86 / x64
|
||||||
UC_MODE_16 = 1 << 1, // 16-bit mode
|
UC_MODE_16 = 1 << 1, // 16-bit mode
|
||||||
UC_MODE_32 = 1 << 2, // 32-bit mode
|
UC_MODE_32 = 1 << 2, // 32-bit mode
|
||||||
UC_MODE_64 = 1 << 3, // 64-bit mode
|
UC_MODE_64 = 1 << 3, // 64-bit mode
|
||||||
|
|
||||||
// ppc
|
// ppc
|
||||||
UC_MODE_PPC32 = 1 << 2, // 32-bit mode (currently unsupported)
|
UC_MODE_PPC32 = 1 << 2, // 32-bit mode (currently unsupported)
|
||||||
UC_MODE_PPC64 = 1 << 3, // 64-bit mode (currently unsupported)
|
UC_MODE_PPC64 = 1 << 3, // 64-bit mode (currently unsupported)
|
||||||
UC_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode (currently unsupported)
|
UC_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode (currently unsupported)
|
||||||
|
|
||||||
// sparc
|
// sparc
|
||||||
UC_MODE_SPARC32 = 1 << 2, // 32-bit mode
|
UC_MODE_SPARC32 = 1 << 2, // 32-bit mode
|
||||||
UC_MODE_SPARC64 = 1 << 3, // 64-bit mode
|
UC_MODE_SPARC64 = 1 << 3, // 64-bit mode
|
||||||
UC_MODE_V9 = 1 << 4, // SparcV9 mode (currently unsupported)
|
UC_MODE_V9 = 1 << 4, // SparcV9 mode (currently unsupported)
|
||||||
|
|
||||||
// m68k
|
// m68k
|
||||||
// No flags for M68K yet
|
// No flags for M68K yet
|
||||||
|
|
||||||
// RISC-V
|
// RISC-V
|
||||||
UC_MODE_RISCV32 = 1 << 2, // 32-bit mode
|
UC_MODE_RISCV32 = 1 << 2, // 32-bit mode
|
||||||
UC_MODE_RISCV64 = 1 << 3, // 64-bit mode
|
UC_MODE_RISCV64 = 1 << 3, // 64-bit mode
|
||||||
|
|
|
@ -33,6 +33,12 @@ static void tosa_machine_init(struct uc_struct *uc, MachineClass *mc)
|
||||||
|
|
||||||
if (uc->mode & UC_MODE_MCLASS) {
|
if (uc->mode & UC_MODE_MCLASS) {
|
||||||
mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-m3");
|
mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-m3");
|
||||||
|
} else if (uc->mode & UC_MODE_ARM926) {
|
||||||
|
mc->default_cpu_type = ARM_CPU_TYPE_NAME("arm926");
|
||||||
|
} else if (uc->mode & UC_MODE_ARM946) {
|
||||||
|
mc->default_cpu_type = ARM_CPU_TYPE_NAME("arm946");
|
||||||
|
} else if (uc->mode & UC_MODE_ARM1176) {
|
||||||
|
mc->default_cpu_type = ARM_CPU_TYPE_NAME("arm1176");
|
||||||
} else {
|
} else {
|
||||||
// Unicorn: Enable all CPU features
|
// Unicorn: Enable all CPU features
|
||||||
mc->default_cpu_type = ARM_CPU_TYPE_NAME("max");
|
mc->default_cpu_type = ARM_CPU_TYPE_NAME("max");
|
||||||
|
|
Loading…
Reference in a new issue