diff options
| author | Lioncash <mathew1800@gmail.com> | 2020-04-24 00:07:38 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2020-04-24 00:20:58 -0400 |
| commit | cc84b48ce5b981bbdc737931c1030f8d3ff3f32b (patch) | |
| tree | 975d5ac2e30ba6031a59d562b31698782f3cfcad /src/core/arm/unicorn | |
| parent | 26f2820ae3f0c85cf4a6a2eb7ddcca70cdbd0a20 (diff) | |
physical_core: Make use of std::make_unique instead of std::make_shared in ctor
We can also allow unicorn to be constructed in 32-bit mode or 64-bit
mode to satisfy the need for both interpreter instances.
Allows this code to compile successfully of non x86-64 architectures.
Diffstat (limited to 'src/core/arm/unicorn')
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.cpp | 5 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.h | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp index b96583123..e40e9626a 100644 --- a/src/core/arm/unicorn/arm_unicorn.cpp +++ b/src/core/arm/unicorn/arm_unicorn.cpp @@ -62,8 +62,9 @@ static bool UnmappedMemoryHook(uc_engine* uc, uc_mem_type type, u64 addr, int si return false; } -ARM_Unicorn::ARM_Unicorn(System& system) : ARM_Interface{system} { - CHECKED(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc)); +ARM_Unicorn::ARM_Unicorn(System& system, Arch architecture) : ARM_Interface{system} { + const auto arch = architecture == Arch::AArch32 ? UC_ARCH_ARM : UC_ARCH_ARM64; + CHECKED(uc_open(arch, UC_MODE_ARM, &uc)); auto fpv = 3 << 20; CHECKED(uc_reg_write(uc, UC_ARM64_REG_CPACR_EL1, &fpv)); diff --git a/src/core/arm/unicorn/arm_unicorn.h b/src/core/arm/unicorn/arm_unicorn.h index f30d13cb6..725c65085 100644 --- a/src/core/arm/unicorn/arm_unicorn.h +++ b/src/core/arm/unicorn/arm_unicorn.h @@ -15,7 +15,12 @@ class System; class ARM_Unicorn final : public ARM_Interface { public: - explicit ARM_Unicorn(System& system); + enum class Arch { + AArch32, // 32-bit ARM + AArch64, // 64-bit ARM + }; + + explicit ARM_Unicorn(System& system, Arch architecture); ~ARM_Unicorn() override; void SetPC(u64 pc) override; |
