diff options
| author | 2023-12-11 20:21:23 -0500 | |
|---|---|---|
| committer | 2023-12-22 21:52:49 -0500 | |
| commit | 419055e484f0f0073d5832f7ded5fd3a3e5ad7de (patch) | |
| tree | 81ff70e80fff780d6fb92f78a2df18cfc323df78 /src/core/arm | |
| parent | Merge pull request #12412 from ameerj/gl-query-prims (diff) | |
| download | yuzu-419055e484f0f0073d5832f7ded5fd3a3e5ad7de.tar.gz yuzu-419055e484f0f0073d5832f7ded5fd3a3e5ad7de.tar.xz yuzu-419055e484f0f0073d5832f7ded5fd3a3e5ad7de.zip | |
kernel: instantiate memory separately for each guest process
Diffstat (limited to 'src/core/arm')
| -rw-r--r-- | src/core/arm/arm_interface.cpp | 2 | ||||
| -rw-r--r-- | src/core/arm/arm_interface.h | 2 | ||||
| -rw-r--r-- | src/core/arm/debug.cpp | 14 | ||||
| -rw-r--r-- | src/core/arm/debug.h | 6 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 6 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.h | 2 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 6 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.h | 2 |
8 files changed, 20 insertions, 20 deletions
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index 698c9c8ad..5dc7e5d59 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | namespace Core { | 10 | namespace Core { |
| 11 | 11 | ||
| 12 | void ArmInterface::LogBacktrace(const Kernel::KProcess* process) const { | 12 | void ArmInterface::LogBacktrace(Kernel::KProcess* process) const { |
| 13 | Kernel::Svc::ThreadContext ctx; | 13 | Kernel::Svc::ThreadContext ctx; |
| 14 | this->GetContext(ctx); | 14 | this->GetContext(ctx); |
| 15 | 15 | ||
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 806c7c9e9..495963eef 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -95,7 +95,7 @@ public: | |||
| 95 | virtual void SignalInterrupt(Kernel::KThread* thread) = 0; | 95 | virtual void SignalInterrupt(Kernel::KThread* thread) = 0; |
| 96 | 96 | ||
| 97 | // Stack trace generation. | 97 | // Stack trace generation. |
| 98 | void LogBacktrace(const Kernel::KProcess* process) const; | 98 | void LogBacktrace(Kernel::KProcess* process) const; |
| 99 | 99 | ||
| 100 | // Debug functionality. | 100 | // Debug functionality. |
| 101 | virtual const Kernel::DebugWatchpoint* HaltedWatchpoint() const = 0; | 101 | virtual const Kernel::DebugWatchpoint* HaltedWatchpoint() const = 0; |
diff --git a/src/core/arm/debug.cpp b/src/core/arm/debug.cpp index af1c34bc3..854509463 100644 --- a/src/core/arm/debug.cpp +++ b/src/core/arm/debug.cpp | |||
| @@ -79,7 +79,7 @@ constexpr std::array<u64, 2> SegmentBases{ | |||
| 79 | 0x7100000000ULL, | 79 | 0x7100000000ULL, |
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | void SymbolicateBacktrace(const Kernel::KProcess* process, std::vector<BacktraceEntry>& out) { | 82 | void SymbolicateBacktrace(Kernel::KProcess* process, std::vector<BacktraceEntry>& out) { |
| 83 | auto modules = FindModules(process); | 83 | auto modules = FindModules(process); |
| 84 | 84 | ||
| 85 | const bool is_64 = process->Is64Bit(); | 85 | const bool is_64 = process->Is64Bit(); |
| @@ -118,7 +118,7 @@ void SymbolicateBacktrace(const Kernel::KProcess* process, std::vector<Backtrace | |||
| 118 | } | 118 | } |
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | std::vector<BacktraceEntry> GetAArch64Backtrace(const Kernel::KProcess* process, | 121 | std::vector<BacktraceEntry> GetAArch64Backtrace(Kernel::KProcess* process, |
| 122 | const Kernel::Svc::ThreadContext& ctx) { | 122 | const Kernel::Svc::ThreadContext& ctx) { |
| 123 | std::vector<BacktraceEntry> out; | 123 | std::vector<BacktraceEntry> out; |
| 124 | auto& memory = process->GetMemory(); | 124 | auto& memory = process->GetMemory(); |
| @@ -144,7 +144,7 @@ std::vector<BacktraceEntry> GetAArch64Backtrace(const Kernel::KProcess* process, | |||
| 144 | return out; | 144 | return out; |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | std::vector<BacktraceEntry> GetAArch32Backtrace(const Kernel::KProcess* process, | 147 | std::vector<BacktraceEntry> GetAArch32Backtrace(Kernel::KProcess* process, |
| 148 | const Kernel::Svc::ThreadContext& ctx) { | 148 | const Kernel::Svc::ThreadContext& ctx) { |
| 149 | std::vector<BacktraceEntry> out; | 149 | std::vector<BacktraceEntry> out; |
| 150 | auto& memory = process->GetMemory(); | 150 | auto& memory = process->GetMemory(); |
| @@ -173,7 +173,7 @@ std::vector<BacktraceEntry> GetAArch32Backtrace(const Kernel::KProcess* process, | |||
| 173 | } // namespace | 173 | } // namespace |
| 174 | 174 | ||
| 175 | std::optional<std::string> GetThreadName(const Kernel::KThread* thread) { | 175 | std::optional<std::string> GetThreadName(const Kernel::KThread* thread) { |
| 176 | const auto* process = thread->GetOwnerProcess(); | 176 | auto* process = thread->GetOwnerProcess(); |
| 177 | if (process->Is64Bit()) { | 177 | if (process->Is64Bit()) { |
| 178 | return GetNameFromThreadType64(process->GetMemory(), *thread); | 178 | return GetNameFromThreadType64(process->GetMemory(), *thread); |
| 179 | } else { | 179 | } else { |
| @@ -248,7 +248,7 @@ Kernel::KProcessAddress GetModuleEnd(const Kernel::KProcess* process, | |||
| 248 | return cur_addr - 1; | 248 | return cur_addr - 1; |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | Loader::AppLoader::Modules FindModules(const Kernel::KProcess* process) { | 251 | Loader::AppLoader::Modules FindModules(Kernel::KProcess* process) { |
| 252 | Loader::AppLoader::Modules modules; | 252 | Loader::AppLoader::Modules modules; |
| 253 | 253 | ||
| 254 | auto& page_table = process->GetPageTable(); | 254 | auto& page_table = process->GetPageTable(); |
| @@ -312,7 +312,7 @@ Loader::AppLoader::Modules FindModules(const Kernel::KProcess* process) { | |||
| 312 | return modules; | 312 | return modules; |
| 313 | } | 313 | } |
| 314 | 314 | ||
| 315 | Kernel::KProcessAddress FindMainModuleEntrypoint(const Kernel::KProcess* process) { | 315 | Kernel::KProcessAddress FindMainModuleEntrypoint(Kernel::KProcess* process) { |
| 316 | // Do we have any loaded executable sections? | 316 | // Do we have any loaded executable sections? |
| 317 | auto modules = FindModules(process); | 317 | auto modules = FindModules(process); |
| 318 | 318 | ||
| @@ -337,7 +337,7 @@ void InvalidateInstructionCacheRange(const Kernel::KProcess* process, u64 addres | |||
| 337 | } | 337 | } |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | std::vector<BacktraceEntry> GetBacktraceFromContext(const Kernel::KProcess* process, | 340 | std::vector<BacktraceEntry> GetBacktraceFromContext(Kernel::KProcess* process, |
| 341 | const Kernel::Svc::ThreadContext& ctx) { | 341 | const Kernel::Svc::ThreadContext& ctx) { |
| 342 | if (process->Is64Bit()) { | 342 | if (process->Is64Bit()) { |
| 343 | return GetAArch64Backtrace(process, ctx); | 343 | return GetAArch64Backtrace(process, ctx); |
diff --git a/src/core/arm/debug.h b/src/core/arm/debug.h index c542633db..3cd671365 100644 --- a/src/core/arm/debug.h +++ b/src/core/arm/debug.h | |||
| @@ -14,9 +14,9 @@ std::optional<std::string> GetThreadName(const Kernel::KThread* thread); | |||
| 14 | std::string_view GetThreadWaitReason(const Kernel::KThread* thread); | 14 | std::string_view GetThreadWaitReason(const Kernel::KThread* thread); |
| 15 | std::string GetThreadState(const Kernel::KThread* thread); | 15 | std::string GetThreadState(const Kernel::KThread* thread); |
| 16 | 16 | ||
| 17 | Loader::AppLoader::Modules FindModules(const Kernel::KProcess* process); | 17 | Loader::AppLoader::Modules FindModules(Kernel::KProcess* process); |
| 18 | Kernel::KProcessAddress GetModuleEnd(const Kernel::KProcess* process, Kernel::KProcessAddress base); | 18 | Kernel::KProcessAddress GetModuleEnd(const Kernel::KProcess* process, Kernel::KProcessAddress base); |
| 19 | Kernel::KProcessAddress FindMainModuleEntrypoint(const Kernel::KProcess* process); | 19 | Kernel::KProcessAddress FindMainModuleEntrypoint(Kernel::KProcess* process); |
| 20 | 20 | ||
| 21 | void InvalidateInstructionCacheRange(const Kernel::KProcess* process, u64 address, u64 size); | 21 | void InvalidateInstructionCacheRange(const Kernel::KProcess* process, u64 address, u64 size); |
| 22 | 22 | ||
| @@ -28,7 +28,7 @@ struct BacktraceEntry { | |||
| 28 | std::string name; | 28 | std::string name; |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | std::vector<BacktraceEntry> GetBacktraceFromContext(const Kernel::KProcess* process, | 31 | std::vector<BacktraceEntry> GetBacktraceFromContext(Kernel::KProcess* process, |
| 32 | const Kernel::Svc::ThreadContext& ctx); | 32 | const Kernel::Svc::ThreadContext& ctx); |
| 33 | std::vector<BacktraceEntry> GetBacktrace(const Kernel::KThread* thread); | 33 | std::vector<BacktraceEntry> GetBacktrace(const Kernel::KThread* thread); |
| 34 | 34 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index f34865e26..c78cfd528 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -15,7 +15,7 @@ using namespace Common::Literals; | |||
| 15 | 15 | ||
| 16 | class DynarmicCallbacks32 : public Dynarmic::A32::UserCallbacks { | 16 | class DynarmicCallbacks32 : public Dynarmic::A32::UserCallbacks { |
| 17 | public: | 17 | public: |
| 18 | explicit DynarmicCallbacks32(ArmDynarmic32& parent, const Kernel::KProcess* process) | 18 | explicit DynarmicCallbacks32(ArmDynarmic32& parent, Kernel::KProcess* process) |
| 19 | : m_parent{parent}, m_memory(process->GetMemory()), | 19 | : m_parent{parent}, m_memory(process->GetMemory()), |
| 20 | m_process(process), m_debugger_enabled{parent.m_system.DebuggerEnabled()}, | 20 | m_process(process), m_debugger_enabled{parent.m_system.DebuggerEnabled()}, |
| 21 | m_check_memory_access{m_debugger_enabled || | 21 | m_check_memory_access{m_debugger_enabled || |
| @@ -169,7 +169,7 @@ public: | |||
| 169 | 169 | ||
| 170 | ArmDynarmic32& m_parent; | 170 | ArmDynarmic32& m_parent; |
| 171 | Core::Memory::Memory& m_memory; | 171 | Core::Memory::Memory& m_memory; |
| 172 | const Kernel::KProcess* m_process{}; | 172 | Kernel::KProcess* m_process{}; |
| 173 | const bool m_debugger_enabled{}; | 173 | const bool m_debugger_enabled{}; |
| 174 | const bool m_check_memory_access{}; | 174 | const bool m_check_memory_access{}; |
| 175 | static constexpr u64 MinimumRunCycles = 10000U; | 175 | static constexpr u64 MinimumRunCycles = 10000U; |
| @@ -370,7 +370,7 @@ void ArmDynarmic32::RewindBreakpointInstruction() { | |||
| 370 | this->SetContext(m_breakpoint_context); | 370 | this->SetContext(m_breakpoint_context); |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | ArmDynarmic32::ArmDynarmic32(System& system, bool uses_wall_clock, const Kernel::KProcess* process, | 373 | ArmDynarmic32::ArmDynarmic32(System& system, bool uses_wall_clock, Kernel::KProcess* process, |
| 374 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index) | 374 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index) |
| 375 | : ArmInterface{uses_wall_clock}, m_system{system}, m_exclusive_monitor{exclusive_monitor}, | 375 | : ArmInterface{uses_wall_clock}, m_system{system}, m_exclusive_monitor{exclusive_monitor}, |
| 376 | m_cb(std::make_unique<DynarmicCallbacks32>(*this, process)), | 376 | m_cb(std::make_unique<DynarmicCallbacks32>(*this, process)), |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.h b/src/core/arm/dynarmic/arm_dynarmic_32.h index 185ac7cbf..b580efe61 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.h +++ b/src/core/arm/dynarmic/arm_dynarmic_32.h | |||
| @@ -20,7 +20,7 @@ class System; | |||
| 20 | 20 | ||
| 21 | class ArmDynarmic32 final : public ArmInterface { | 21 | class ArmDynarmic32 final : public ArmInterface { |
| 22 | public: | 22 | public: |
| 23 | ArmDynarmic32(System& system, bool uses_wall_clock, const Kernel::KProcess* process, | 23 | ArmDynarmic32(System& system, bool uses_wall_clock, Kernel::KProcess* process, |
| 24 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index); | 24 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index); |
| 25 | ~ArmDynarmic32() override; | 25 | ~ArmDynarmic32() override; |
| 26 | 26 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index dff14756e..f351b13d9 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -15,7 +15,7 @@ using namespace Common::Literals; | |||
| 15 | 15 | ||
| 16 | class DynarmicCallbacks64 : public Dynarmic::A64::UserCallbacks { | 16 | class DynarmicCallbacks64 : public Dynarmic::A64::UserCallbacks { |
| 17 | public: | 17 | public: |
| 18 | explicit DynarmicCallbacks64(ArmDynarmic64& parent, const Kernel::KProcess* process) | 18 | explicit DynarmicCallbacks64(ArmDynarmic64& parent, Kernel::KProcess* process) |
| 19 | : m_parent{parent}, m_memory(process->GetMemory()), | 19 | : m_parent{parent}, m_memory(process->GetMemory()), |
| 20 | m_process(process), m_debugger_enabled{parent.m_system.DebuggerEnabled()}, | 20 | m_process(process), m_debugger_enabled{parent.m_system.DebuggerEnabled()}, |
| 21 | m_check_memory_access{m_debugger_enabled || | 21 | m_check_memory_access{m_debugger_enabled || |
| @@ -216,7 +216,7 @@ public: | |||
| 216 | Core::Memory::Memory& m_memory; | 216 | Core::Memory::Memory& m_memory; |
| 217 | u64 m_tpidrro_el0{}; | 217 | u64 m_tpidrro_el0{}; |
| 218 | u64 m_tpidr_el0{}; | 218 | u64 m_tpidr_el0{}; |
| 219 | const Kernel::KProcess* m_process{}; | 219 | Kernel::KProcess* m_process{}; |
| 220 | const bool m_debugger_enabled{}; | 220 | const bool m_debugger_enabled{}; |
| 221 | const bool m_check_memory_access{}; | 221 | const bool m_check_memory_access{}; |
| 222 | static constexpr u64 MinimumRunCycles = 10000U; | 222 | static constexpr u64 MinimumRunCycles = 10000U; |
| @@ -399,7 +399,7 @@ void ArmDynarmic64::RewindBreakpointInstruction() { | |||
| 399 | this->SetContext(m_breakpoint_context); | 399 | this->SetContext(m_breakpoint_context); |
| 400 | } | 400 | } |
| 401 | 401 | ||
| 402 | ArmDynarmic64::ArmDynarmic64(System& system, bool uses_wall_clock, const Kernel::KProcess* process, | 402 | ArmDynarmic64::ArmDynarmic64(System& system, bool uses_wall_clock, Kernel::KProcess* process, |
| 403 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index) | 403 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index) |
| 404 | : ArmInterface{uses_wall_clock}, m_system{system}, m_exclusive_monitor{exclusive_monitor}, | 404 | : ArmInterface{uses_wall_clock}, m_system{system}, m_exclusive_monitor{exclusive_monitor}, |
| 405 | m_cb(std::make_unique<DynarmicCallbacks64>(*this, process)), m_core_index{core_index} { | 405 | m_cb(std::make_unique<DynarmicCallbacks64>(*this, process)), m_core_index{core_index} { |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.h b/src/core/arm/dynarmic/arm_dynarmic_64.h index 4f3dd026f..08cd982b3 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.h +++ b/src/core/arm/dynarmic/arm_dynarmic_64.h | |||
| @@ -25,7 +25,7 @@ class System; | |||
| 25 | 25 | ||
| 26 | class ArmDynarmic64 final : public ArmInterface { | 26 | class ArmDynarmic64 final : public ArmInterface { |
| 27 | public: | 27 | public: |
| 28 | ArmDynarmic64(System& system, bool uses_wall_clock, const Kernel::KProcess* process, | 28 | ArmDynarmic64(System& system, bool uses_wall_clock, Kernel::KProcess* process, |
| 29 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index); | 29 | DynarmicExclusiveMonitor& exclusive_monitor, std::size_t core_index); |
| 30 | ~ArmDynarmic64() override; | 30 | ~ArmDynarmic64() override; |
| 31 | 31 | ||