diff options
Diffstat (limited to 'src/core/arm')
| -rw-r--r-- | src/core/arm/arm_interface.cpp | 3 | ||||
| -rw-r--r-- | src/core/arm/arm_interface.h | 8 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 8 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.h | 1 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.cpp | 2 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.h | 1 |
6 files changed, 14 insertions, 9 deletions
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index 372612c9b..dea192869 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include "core/memory.h" | 13 | #include "core/memory.h" |
| 14 | 14 | ||
| 15 | namespace Core { | 15 | namespace Core { |
| 16 | |||
| 17 | namespace { | 16 | namespace { |
| 18 | 17 | ||
| 19 | constexpr u64 ELF_DYNAMIC_TAG_NULL = 0; | 18 | constexpr u64 ELF_DYNAMIC_TAG_NULL = 0; |
| @@ -156,7 +155,7 @@ std::vector<ARM_Interface::BacktraceEntry> ARM_Interface::GetBacktrace() const { | |||
| 156 | } | 155 | } |
| 157 | 156 | ||
| 158 | std::map<VAddr, std::string> modules; | 157 | std::map<VAddr, std::string> modules; |
| 159 | auto& loader{System::GetInstance().GetAppLoader()}; | 158 | auto& loader{system.GetAppLoader()}; |
| 160 | if (loader.ReadNSOModules(modules) != Loader::ResultStatus::Success) { | 159 | if (loader.ReadNSOModules(modules) != Loader::ResultStatus::Success) { |
| 161 | return {}; | 160 | return {}; |
| 162 | } | 161 | } |
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 45e94e625..47b964eb7 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -17,11 +17,13 @@ enum class VMAPermission : u8; | |||
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | namespace Core { | 19 | namespace Core { |
| 20 | class System; | ||
| 20 | 21 | ||
| 21 | /// Generic ARMv8 CPU interface | 22 | /// Generic ARMv8 CPU interface |
| 22 | class ARM_Interface : NonCopyable { | 23 | class ARM_Interface : NonCopyable { |
| 23 | public: | 24 | public: |
| 24 | virtual ~ARM_Interface() {} | 25 | explicit ARM_Interface(System& system_) : system{system_} {} |
| 26 | virtual ~ARM_Interface() = default; | ||
| 25 | 27 | ||
| 26 | struct ThreadContext { | 28 | struct ThreadContext { |
| 27 | std::array<u64, 31> cpu_registers; | 29 | std::array<u64, 31> cpu_registers; |
| @@ -163,6 +165,10 @@ public: | |||
| 163 | /// fp+0 : pointer to previous frame record | 165 | /// fp+0 : pointer to previous frame record |
| 164 | /// fp+8 : value of lr for frame | 166 | /// fp+8 : value of lr for frame |
| 165 | void LogBacktrace() const; | 167 | void LogBacktrace() const; |
| 168 | |||
| 169 | protected: | ||
| 170 | /// System context that this ARM interface is running under. | ||
| 171 | System& system; | ||
| 166 | }; | 172 | }; |
| 167 | 173 | ||
| 168 | } // namespace Core | 174 | } // namespace Core |
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index a0705b2b8..2b396f1d6 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -28,6 +28,7 @@ public: | |||
| 28 | explicit ARM_Dynarmic_Callbacks(ARM_Dynarmic& parent) : parent(parent) {} | 28 | explicit ARM_Dynarmic_Callbacks(ARM_Dynarmic& parent) : parent(parent) {} |
| 29 | 29 | ||
| 30 | u8 MemoryRead8(u64 vaddr) override { | 30 | u8 MemoryRead8(u64 vaddr) override { |
| 31 | auto& s = parent.system; | ||
| 31 | return Memory::Read8(vaddr); | 32 | return Memory::Read8(vaddr); |
| 32 | } | 33 | } |
| 33 | u16 MemoryRead16(u64 vaddr) override { | 34 | u16 MemoryRead16(u64 vaddr) override { |
| @@ -171,9 +172,10 @@ void ARM_Dynarmic::Step() { | |||
| 171 | 172 | ||
| 172 | ARM_Dynarmic::ARM_Dynarmic(System& system, ExclusiveMonitor& exclusive_monitor, | 173 | ARM_Dynarmic::ARM_Dynarmic(System& system, ExclusiveMonitor& exclusive_monitor, |
| 173 | std::size_t core_index) | 174 | std::size_t core_index) |
| 174 | : cb(std::make_unique<ARM_Dynarmic_Callbacks>(*this)), inner_unicorn{system}, | 175 | : ARM_Interface{system}, |
| 175 | core_index{core_index}, system{system}, | 176 | cb(std::make_unique<ARM_Dynarmic_Callbacks>(*this)), inner_unicorn{system}, |
| 176 | exclusive_monitor{dynamic_cast<DynarmicExclusiveMonitor&>(exclusive_monitor)} {} | 177 | core_index{core_index}, exclusive_monitor{ |
| 178 | dynamic_cast<DynarmicExclusiveMonitor&>(exclusive_monitor)} {} | ||
| 177 | 179 | ||
| 178 | ARM_Dynarmic::~ARM_Dynarmic() = default; | 180 | ARM_Dynarmic::~ARM_Dynarmic() = default; |
| 179 | 181 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index 504d46c68..d08de475f 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h | |||
| @@ -58,7 +58,6 @@ private: | |||
| 58 | ARM_Unicorn inner_unicorn; | 58 | ARM_Unicorn inner_unicorn; |
| 59 | 59 | ||
| 60 | std::size_t core_index; | 60 | std::size_t core_index; |
| 61 | System& system; | ||
| 62 | DynarmicExclusiveMonitor& exclusive_monitor; | 61 | DynarmicExclusiveMonitor& exclusive_monitor; |
| 63 | }; | 62 | }; |
| 64 | 63 | ||
diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp index 9698172db..48182c99a 100644 --- a/src/core/arm/unicorn/arm_unicorn.cpp +++ b/src/core/arm/unicorn/arm_unicorn.cpp | |||
| @@ -60,7 +60,7 @@ static bool UnmappedMemoryHook(uc_engine* uc, uc_mem_type type, u64 addr, int si | |||
| 60 | return false; | 60 | return false; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | ARM_Unicorn::ARM_Unicorn(System& system) : system{system} { | 63 | ARM_Unicorn::ARM_Unicorn(System& system) : ARM_Interface{system} { |
| 64 | CHECKED(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc)); | 64 | CHECKED(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc)); |
| 65 | 65 | ||
| 66 | auto fpv = 3 << 20; | 66 | auto fpv = 3 << 20; |
diff --git a/src/core/arm/unicorn/arm_unicorn.h b/src/core/arm/unicorn/arm_unicorn.h index b39426ea0..3c5b155f9 100644 --- a/src/core/arm/unicorn/arm_unicorn.h +++ b/src/core/arm/unicorn/arm_unicorn.h | |||
| @@ -45,7 +45,6 @@ private: | |||
| 45 | static void InterruptHook(uc_engine* uc, u32 int_no, void* user_data); | 45 | static void InterruptHook(uc_engine* uc, u32 int_no, void* user_data); |
| 46 | 46 | ||
| 47 | uc_engine* uc{}; | 47 | uc_engine* uc{}; |
| 48 | System& system; | ||
| 49 | GDBStub::BreakpointAddress last_bkpt{}; | 48 | GDBStub::BreakpointAddress last_bkpt{}; |
| 50 | bool last_bkpt_hit = false; | 49 | bool last_bkpt_hit = false; |
| 51 | }; | 50 | }; |