summaryrefslogtreecommitdiff
path: root/src/core/arm
diff options
context:
space:
mode:
authorGravatar Liam2023-12-11 20:21:23 -0500
committerGravatar Liam2023-12-22 21:52:49 -0500
commit419055e484f0f0073d5832f7ded5fd3a3e5ad7de (patch)
tree81ff70e80fff780d6fb92f78a2df18cfc323df78 /src/core/arm
parentMerge pull request #12412 from ameerj/gl-query-prims (diff)
downloadyuzu-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.cpp2
-rw-r--r--src/core/arm/arm_interface.h2
-rw-r--r--src/core/arm/debug.cpp14
-rw-r--r--src/core/arm/debug.h6
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp6
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.h2
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp6
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.h2
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
10namespace Core { 10namespace Core {
11 11
12void ArmInterface::LogBacktrace(const Kernel::KProcess* process) const { 12void 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
82void SymbolicateBacktrace(const Kernel::KProcess* process, std::vector<BacktraceEntry>& out) { 82void 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
121std::vector<BacktraceEntry> GetAArch64Backtrace(const Kernel::KProcess* process, 121std::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
147std::vector<BacktraceEntry> GetAArch32Backtrace(const Kernel::KProcess* process, 147std::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
175std::optional<std::string> GetThreadName(const Kernel::KThread* thread) { 175std::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
251Loader::AppLoader::Modules FindModules(const Kernel::KProcess* process) { 251Loader::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
315Kernel::KProcessAddress FindMainModuleEntrypoint(const Kernel::KProcess* process) { 315Kernel::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
340std::vector<BacktraceEntry> GetBacktraceFromContext(const Kernel::KProcess* process, 340std::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);
14std::string_view GetThreadWaitReason(const Kernel::KThread* thread); 14std::string_view GetThreadWaitReason(const Kernel::KThread* thread);
15std::string GetThreadState(const Kernel::KThread* thread); 15std::string GetThreadState(const Kernel::KThread* thread);
16 16
17Loader::AppLoader::Modules FindModules(const Kernel::KProcess* process); 17Loader::AppLoader::Modules FindModules(Kernel::KProcess* process);
18Kernel::KProcessAddress GetModuleEnd(const Kernel::KProcess* process, Kernel::KProcessAddress base); 18Kernel::KProcessAddress GetModuleEnd(const Kernel::KProcess* process, Kernel::KProcessAddress base);
19Kernel::KProcessAddress FindMainModuleEntrypoint(const Kernel::KProcess* process); 19Kernel::KProcessAddress FindMainModuleEntrypoint(Kernel::KProcess* process);
20 20
21void InvalidateInstructionCacheRange(const Kernel::KProcess* process, u64 address, u64 size); 21void 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
31std::vector<BacktraceEntry> GetBacktraceFromContext(const Kernel::KProcess* process, 31std::vector<BacktraceEntry> GetBacktraceFromContext(Kernel::KProcess* process,
32 const Kernel::Svc::ThreadContext& ctx); 32 const Kernel::Svc::ThreadContext& ctx);
33std::vector<BacktraceEntry> GetBacktrace(const Kernel::KThread* thread); 33std::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
16class DynarmicCallbacks32 : public Dynarmic::A32::UserCallbacks { 16class DynarmicCallbacks32 : public Dynarmic::A32::UserCallbacks {
17public: 17public:
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
373ArmDynarmic32::ArmDynarmic32(System& system, bool uses_wall_clock, const Kernel::KProcess* process, 373ArmDynarmic32::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
21class ArmDynarmic32 final : public ArmInterface { 21class ArmDynarmic32 final : public ArmInterface {
22public: 22public:
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
16class DynarmicCallbacks64 : public Dynarmic::A64::UserCallbacks { 16class DynarmicCallbacks64 : public Dynarmic::A64::UserCallbacks {
17public: 17public:
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
402ArmDynarmic64::ArmDynarmic64(System& system, bool uses_wall_clock, const Kernel::KProcess* process, 402ArmDynarmic64::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
26class ArmDynarmic64 final : public ArmInterface { 26class ArmDynarmic64 final : public ArmInterface {
27public: 27public:
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