diff options
| author | 2018-10-10 10:34:20 -0400 | |
|---|---|---|
| committer | 2018-10-10 10:34:20 -0400 | |
| commit | 68b3d8b7a974780ff1eef3fe5764b2dd9cdb4d32 (patch) | |
| tree | 1c5d3e1b178d7252cd3e752d8f2a99017a0ecb6d | |
| parent | Merge pull request #1461 from lioncash/warn (diff) | |
| parent | kernel/thread: Use a regular pointer for the owner/current process (diff) | |
| download | yuzu-68b3d8b7a974780ff1eef3fe5764b2dd9cdb4d32.tar.gz yuzu-68b3d8b7a974780ff1eef3fe5764b2dd9cdb4d32.tar.xz yuzu-68b3d8b7a974780ff1eef3fe5764b2dd9cdb4d32.zip | |
Merge pull request #1469 from lioncash/ptr
kernel/thread: Use a regular pointer for the owner/current process
Diffstat (limited to '')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 2 | ||||
| -rw-r--r-- | src/core/core.cpp | 7 | ||||
| -rw-r--r-- | src/core/core.h | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/scheduler.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.h | 8 | ||||
| -rw-r--r-- | src/tests/core/arm/arm_test_common.cpp | 3 |
10 files changed, 41 insertions, 39 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 7e978cf7a..0762321a9 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -129,7 +129,7 @@ public: | |||
| 129 | }; | 129 | }; |
| 130 | 130 | ||
| 131 | std::unique_ptr<Dynarmic::A64::Jit> ARM_Dynarmic::MakeJit() const { | 131 | std::unique_ptr<Dynarmic::A64::Jit> ARM_Dynarmic::MakeJit() const { |
| 132 | auto& current_process = Core::CurrentProcess(); | 132 | auto* current_process = Core::CurrentProcess(); |
| 133 | auto** const page_table = current_process->VMManager().page_table.pointers.data(); | 133 | auto** const page_table = current_process->VMManager().page_table.pointers.data(); |
| 134 | 134 | ||
| 135 | Dynarmic::A64::UserConfig config; | 135 | Dynarmic::A64::UserConfig config; |
diff --git a/src/core/core.cpp b/src/core/core.cpp index b6acfb3e4..e2fb9e038 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -136,7 +136,8 @@ struct System::Impl { | |||
| 136 | if (virtual_filesystem == nullptr) | 136 | if (virtual_filesystem == nullptr) |
| 137 | virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); | 137 | virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); |
| 138 | 138 | ||
| 139 | kernel.MakeCurrentProcess(Kernel::Process::Create(kernel, "main")); | 139 | auto main_process = Kernel::Process::Create(kernel, "main"); |
| 140 | kernel.MakeCurrentProcess(main_process.get()); | ||
| 140 | 141 | ||
| 141 | cpu_barrier = std::make_shared<CpuBarrier>(); | 142 | cpu_barrier = std::make_shared<CpuBarrier>(); |
| 142 | cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); | 143 | cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); |
| @@ -361,11 +362,11 @@ const std::shared_ptr<Kernel::Scheduler>& System::Scheduler(std::size_t core_ind | |||
| 361 | return impl->cpu_cores[core_index]->Scheduler(); | 362 | return impl->cpu_cores[core_index]->Scheduler(); |
| 362 | } | 363 | } |
| 363 | 364 | ||
| 364 | Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() { | 365 | Kernel::Process* System::CurrentProcess() { |
| 365 | return impl->kernel.CurrentProcess(); | 366 | return impl->kernel.CurrentProcess(); |
| 366 | } | 367 | } |
| 367 | 368 | ||
| 368 | const Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() const { | 369 | const Kernel::Process* System::CurrentProcess() const { |
| 369 | return impl->kernel.CurrentProcess(); | 370 | return impl->kernel.CurrentProcess(); |
| 370 | } | 371 | } |
| 371 | 372 | ||
diff --git a/src/core/core.h b/src/core/core.h index f9a3e97e3..ea4d53914 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -174,11 +174,11 @@ public: | |||
| 174 | /// Gets the scheduler for the CPU core with the specified index | 174 | /// Gets the scheduler for the CPU core with the specified index |
| 175 | const std::shared_ptr<Kernel::Scheduler>& Scheduler(std::size_t core_index); | 175 | const std::shared_ptr<Kernel::Scheduler>& Scheduler(std::size_t core_index); |
| 176 | 176 | ||
| 177 | /// Provides a reference to the current process | 177 | /// Provides a pointer to the current process |
| 178 | Kernel::SharedPtr<Kernel::Process>& CurrentProcess(); | 178 | Kernel::Process* CurrentProcess(); |
| 179 | 179 | ||
| 180 | /// Provides a constant reference to the current process. | 180 | /// Provides a constant pointer to the current process. |
| 181 | const Kernel::SharedPtr<Kernel::Process>& CurrentProcess() const; | 181 | const Kernel::Process* CurrentProcess() const; |
| 182 | 182 | ||
| 183 | /// Provides a reference to the kernel instance. | 183 | /// Provides a reference to the kernel instance. |
| 184 | Kernel::KernelCore& Kernel(); | 184 | Kernel::KernelCore& Kernel(); |
| @@ -246,7 +246,7 @@ inline TelemetrySession& Telemetry() { | |||
| 246 | return System::GetInstance().TelemetrySession(); | 246 | return System::GetInstance().TelemetrySession(); |
| 247 | } | 247 | } |
| 248 | 248 | ||
| 249 | inline Kernel::SharedPtr<Kernel::Process>& CurrentProcess() { | 249 | inline Kernel::Process* CurrentProcess() { |
| 250 | return System::GetInstance().CurrentProcess(); | 250 | return System::GetInstance().CurrentProcess(); |
| 251 | } | 251 | } |
| 252 | 252 | ||
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 98eb74298..bd680adfe 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -116,7 +116,7 @@ struct KernelCore::Impl { | |||
| 116 | next_thread_id = 1; | 116 | next_thread_id = 1; |
| 117 | 117 | ||
| 118 | process_list.clear(); | 118 | process_list.clear(); |
| 119 | current_process.reset(); | 119 | current_process = nullptr; |
| 120 | 120 | ||
| 121 | handle_table.Clear(); | 121 | handle_table.Clear(); |
| 122 | resource_limits.fill(nullptr); | 122 | resource_limits.fill(nullptr); |
| @@ -207,7 +207,7 @@ struct KernelCore::Impl { | |||
| 207 | 207 | ||
| 208 | // Lists all processes that exist in the current session. | 208 | // Lists all processes that exist in the current session. |
| 209 | std::vector<SharedPtr<Process>> process_list; | 209 | std::vector<SharedPtr<Process>> process_list; |
| 210 | SharedPtr<Process> current_process; | 210 | Process* current_process = nullptr; |
| 211 | 211 | ||
| 212 | Kernel::HandleTable handle_table; | 212 | Kernel::HandleTable handle_table; |
| 213 | std::array<SharedPtr<ResourceLimit>, 4> resource_limits; | 213 | std::array<SharedPtr<ResourceLimit>, 4> resource_limits; |
| @@ -266,15 +266,15 @@ void KernelCore::AppendNewProcess(SharedPtr<Process> process) { | |||
| 266 | impl->process_list.push_back(std::move(process)); | 266 | impl->process_list.push_back(std::move(process)); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | void KernelCore::MakeCurrentProcess(SharedPtr<Process> process) { | 269 | void KernelCore::MakeCurrentProcess(Process* process) { |
| 270 | impl->current_process = std::move(process); | 270 | impl->current_process = process; |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | SharedPtr<Process>& KernelCore::CurrentProcess() { | 273 | Process* KernelCore::CurrentProcess() { |
| 274 | return impl->current_process; | 274 | return impl->current_process; |
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | const SharedPtr<Process>& KernelCore::CurrentProcess() const { | 277 | const Process* KernelCore::CurrentProcess() const { |
| 278 | return impl->current_process; | 278 | return impl->current_process; |
| 279 | } | 279 | } |
| 280 | 280 | ||
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index c0771ecf0..41554821f 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -66,13 +66,13 @@ public: | |||
| 66 | void AppendNewProcess(SharedPtr<Process> process); | 66 | void AppendNewProcess(SharedPtr<Process> process); |
| 67 | 67 | ||
| 68 | /// Makes the given process the new current process. | 68 | /// Makes the given process the new current process. |
| 69 | void MakeCurrentProcess(SharedPtr<Process> process); | 69 | void MakeCurrentProcess(Process* process); |
| 70 | 70 | ||
| 71 | /// Retrieves a reference to the current process. | 71 | /// Retrieves a pointer to the current process. |
| 72 | SharedPtr<Process>& CurrentProcess(); | 72 | Process* CurrentProcess(); |
| 73 | 73 | ||
| 74 | /// Retrieves a const reference to the current process. | 74 | /// Retrieves a const pointer to the current process. |
| 75 | const SharedPtr<Process>& CurrentProcess() const; | 75 | const Process* CurrentProcess() const; |
| 76 | 76 | ||
| 77 | /// Adds a port to the named port table | 77 | /// Adds a port to the named port table |
| 78 | void AddNamedPort(std::string name, SharedPtr<ClientPort> port); | 78 | void AddNamedPort(std::string name, SharedPtr<ClientPort> port); |
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp index cfd6e1bad..1342c597e 100644 --- a/src/core/hle/kernel/scheduler.cpp +++ b/src/core/hle/kernel/scheduler.cpp | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include "common/logging/log.h" | 9 | #include "common/logging/log.h" |
| 10 | #include "core/arm/arm_interface.h" | 10 | #include "core/arm/arm_interface.h" |
| 11 | #include "core/core.h" | 11 | #include "core/core.h" |
| 12 | #include "core/core_timing.h" | 12 | #include "core/hle/kernel/kernel.h" |
| 13 | #include "core/hle/kernel/process.h" | 13 | #include "core/hle/kernel/process.h" |
| 14 | #include "core/hle/kernel/scheduler.h" | 14 | #include "core/hle/kernel/scheduler.h" |
| 15 | 15 | ||
| @@ -78,16 +78,16 @@ void Scheduler::SwitchContext(Thread* new_thread) { | |||
| 78 | // Cancel any outstanding wakeup events for this thread | 78 | // Cancel any outstanding wakeup events for this thread |
| 79 | new_thread->CancelWakeupTimer(); | 79 | new_thread->CancelWakeupTimer(); |
| 80 | 80 | ||
| 81 | auto previous_process = Core::CurrentProcess(); | 81 | auto* const previous_process = Core::CurrentProcess(); |
| 82 | 82 | ||
| 83 | current_thread = new_thread; | 83 | current_thread = new_thread; |
| 84 | 84 | ||
| 85 | ready_queue.remove(new_thread->GetPriority(), new_thread); | 85 | ready_queue.remove(new_thread->GetPriority(), new_thread); |
| 86 | new_thread->SetStatus(ThreadStatus::Running); | 86 | new_thread->SetStatus(ThreadStatus::Running); |
| 87 | 87 | ||
| 88 | const auto thread_owner_process = current_thread->GetOwnerProcess(); | 88 | auto* const thread_owner_process = current_thread->GetOwnerProcess(); |
| 89 | if (previous_process != thread_owner_process) { | 89 | if (previous_process != thread_owner_process) { |
| 90 | Core::CurrentProcess() = thread_owner_process; | 90 | Core::System::GetInstance().Kernel().MakeCurrentProcess(thread_owner_process); |
| 91 | SetCurrentPageTable(&Core::CurrentProcess()->VMManager().page_table); | 91 | SetCurrentPageTable(&Core::CurrentProcess()->VMManager().page_table); |
| 92 | } | 92 | } |
| 93 | 93 | ||
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index b488b508d..3afcce3fe 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -341,7 +341,7 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) | |||
| 341 | LOG_TRACE(Kernel_SVC, "called info_id=0x{:X}, info_sub_id=0x{:X}, handle=0x{:08X}", info_id, | 341 | LOG_TRACE(Kernel_SVC, "called info_id=0x{:X}, info_sub_id=0x{:X}, handle=0x{:08X}", info_id, |
| 342 | info_sub_id, handle); | 342 | info_sub_id, handle); |
| 343 | 343 | ||
| 344 | const auto& current_process = Core::CurrentProcess(); | 344 | const auto* current_process = Core::CurrentProcess(); |
| 345 | const auto& vm_manager = current_process->VMManager(); | 345 | const auto& vm_manager = current_process->VMManager(); |
| 346 | 346 | ||
| 347 | switch (static_cast<GetInfoType>(info_id)) { | 347 | switch (static_cast<GetInfoType>(info_id)) { |
| @@ -439,7 +439,7 @@ static ResultCode GetThreadContext(VAddr thread_context, Handle handle) { | |||
| 439 | return ERR_INVALID_HANDLE; | 439 | return ERR_INVALID_HANDLE; |
| 440 | } | 440 | } |
| 441 | 441 | ||
| 442 | const auto current_process = Core::CurrentProcess(); | 442 | const auto* current_process = Core::CurrentProcess(); |
| 443 | if (thread->GetOwnerProcess() != current_process) { | 443 | if (thread->GetOwnerProcess() != current_process) { |
| 444 | return ERR_INVALID_HANDLE; | 444 | return ERR_INVALID_HANDLE; |
| 445 | } | 445 | } |
| @@ -531,7 +531,7 @@ static ResultCode MapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 s | |||
| 531 | return ERR_INVALID_HANDLE; | 531 | return ERR_INVALID_HANDLE; |
| 532 | } | 532 | } |
| 533 | 533 | ||
| 534 | return shared_memory->Map(Core::CurrentProcess().get(), addr, permissions_type, | 534 | return shared_memory->Map(Core::CurrentProcess(), addr, permissions_type, |
| 535 | MemoryPermission::DontCare); | 535 | MemoryPermission::DontCare); |
| 536 | } | 536 | } |
| 537 | 537 | ||
| @@ -550,7 +550,7 @@ static ResultCode UnmapSharedMemory(Handle shared_memory_handle, VAddr addr, u64 | |||
| 550 | auto& kernel = Core::System::GetInstance().Kernel(); | 550 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 551 | auto shared_memory = kernel.HandleTable().Get<SharedMemory>(shared_memory_handle); | 551 | auto shared_memory = kernel.HandleTable().Get<SharedMemory>(shared_memory_handle); |
| 552 | 552 | ||
| 553 | return shared_memory->Unmap(Core::CurrentProcess().get(), addr); | 553 | return shared_memory->Unmap(Core::CurrentProcess(), addr); |
| 554 | } | 554 | } |
| 555 | 555 | ||
| 556 | /// Query process memory | 556 | /// Query process memory |
| @@ -588,7 +588,7 @@ static ResultCode QueryMemory(MemoryInfo* memory_info, PageInfo* page_info, VAdd | |||
| 588 | 588 | ||
| 589 | /// Exits the current process | 589 | /// Exits the current process |
| 590 | static void ExitProcess() { | 590 | static void ExitProcess() { |
| 591 | auto& current_process = Core::CurrentProcess(); | 591 | auto* current_process = Core::CurrentProcess(); |
| 592 | 592 | ||
| 593 | LOG_INFO(Kernel_SVC, "Process {} exiting", current_process->GetProcessID()); | 593 | LOG_INFO(Kernel_SVC, "Process {} exiting", current_process->GetProcessID()); |
| 594 | ASSERT_MSG(current_process->GetStatus() == ProcessStatus::Running, | 594 | ASSERT_MSG(current_process->GetStatus() == ProcessStatus::Running, |
| @@ -636,7 +636,7 @@ static ResultCode CreateThread(Handle* out_handle, VAddr entry_point, u64 arg, V | |||
| 636 | auto& kernel = Core::System::GetInstance().Kernel(); | 636 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 637 | CASCADE_RESULT(SharedPtr<Thread> thread, | 637 | CASCADE_RESULT(SharedPtr<Thread> thread, |
| 638 | Thread::Create(kernel, name, entry_point, priority, arg, processor_id, stack_top, | 638 | Thread::Create(kernel, name, entry_point, priority, arg, processor_id, stack_top, |
| 639 | Core::CurrentProcess())); | 639 | *Core::CurrentProcess())); |
| 640 | const auto new_guest_handle = kernel.HandleTable().Create(thread); | 640 | const auto new_guest_handle = kernel.HandleTable().Create(thread); |
| 641 | if (new_guest_handle.Failed()) { | 641 | if (new_guest_handle.Failed()) { |
| 642 | return new_guest_handle.Code(); | 642 | return new_guest_handle.Code(); |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 8e514cf9a..33aed8c23 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -194,7 +194,7 @@ static void ResetThreadContext(Core::ARM_Interface::ThreadContext& context, VAdd | |||
| 194 | 194 | ||
| 195 | ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name, VAddr entry_point, | 195 | ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name, VAddr entry_point, |
| 196 | u32 priority, u64 arg, s32 processor_id, | 196 | u32 priority, u64 arg, s32 processor_id, |
| 197 | VAddr stack_top, SharedPtr<Process> owner_process) { | 197 | VAddr stack_top, Process& owner_process) { |
| 198 | // Check if priority is in ranged. Lowest priority -> highest priority id. | 198 | // Check if priority is in ranged. Lowest priority -> highest priority id. |
| 199 | if (priority > THREADPRIO_LOWEST) { | 199 | if (priority > THREADPRIO_LOWEST) { |
| 200 | LOG_ERROR(Kernel_SVC, "Invalid thread priority: {}", priority); | 200 | LOG_ERROR(Kernel_SVC, "Invalid thread priority: {}", priority); |
| @@ -208,7 +208,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name | |||
| 208 | 208 | ||
| 209 | // TODO(yuriks): Other checks, returning 0xD9001BEA | 209 | // TODO(yuriks): Other checks, returning 0xD9001BEA |
| 210 | 210 | ||
| 211 | if (!Memory::IsValidVirtualAddress(*owner_process, entry_point)) { | 211 | if (!Memory::IsValidVirtualAddress(owner_process, entry_point)) { |
| 212 | LOG_ERROR(Kernel_SVC, "(name={}): invalid entry {:016X}", name, entry_point); | 212 | LOG_ERROR(Kernel_SVC, "(name={}): invalid entry {:016X}", name, entry_point); |
| 213 | // TODO (bunnei): Find the correct error code to use here | 213 | // TODO (bunnei): Find the correct error code to use here |
| 214 | return ResultCode(-1); | 214 | return ResultCode(-1); |
| @@ -232,7 +232,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name | |||
| 232 | thread->wait_handle = 0; | 232 | thread->wait_handle = 0; |
| 233 | thread->name = std::move(name); | 233 | thread->name = std::move(name); |
| 234 | thread->callback_handle = kernel.ThreadWakeupCallbackHandleTable().Create(thread).Unwrap(); | 234 | thread->callback_handle = kernel.ThreadWakeupCallbackHandleTable().Create(thread).Unwrap(); |
| 235 | thread->owner_process = owner_process; | 235 | thread->owner_process = &owner_process; |
| 236 | thread->scheduler = Core::System::GetInstance().Scheduler(processor_id).get(); | 236 | thread->scheduler = Core::System::GetInstance().Scheduler(processor_id).get(); |
| 237 | thread->scheduler->AddThread(thread, priority); | 237 | thread->scheduler->AddThread(thread, priority); |
| 238 | thread->tls_address = thread->owner_process->MarkNextAvailableTLSSlotAsUsed(*thread); | 238 | thread->tls_address = thread->owner_process->MarkNextAvailableTLSSlotAsUsed(*thread); |
| @@ -264,7 +264,7 @@ SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 pri | |||
| 264 | // Initialize new "main" thread | 264 | // Initialize new "main" thread |
| 265 | const VAddr stack_top = owner_process.VMManager().GetTLSIORegionEndAddress(); | 265 | const VAddr stack_top = owner_process.VMManager().GetTLSIORegionEndAddress(); |
| 266 | auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0, | 266 | auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0, |
| 267 | stack_top, &owner_process); | 267 | stack_top, owner_process); |
| 268 | 268 | ||
| 269 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); | 269 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); |
| 270 | 270 | ||
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index c6ffbd28c..f4d7bd235 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h | |||
| @@ -89,7 +89,7 @@ public: | |||
| 89 | static ResultVal<SharedPtr<Thread>> Create(KernelCore& kernel, std::string name, | 89 | static ResultVal<SharedPtr<Thread>> Create(KernelCore& kernel, std::string name, |
| 90 | VAddr entry_point, u32 priority, u64 arg, | 90 | VAddr entry_point, u32 priority, u64 arg, |
| 91 | s32 processor_id, VAddr stack_top, | 91 | s32 processor_id, VAddr stack_top, |
| 92 | SharedPtr<Process> owner_process); | 92 | Process& owner_process); |
| 93 | 93 | ||
| 94 | std::string GetName() const override { | 94 | std::string GetName() const override { |
| 95 | return name; | 95 | return name; |
| @@ -262,11 +262,11 @@ public: | |||
| 262 | return processor_id; | 262 | return processor_id; |
| 263 | } | 263 | } |
| 264 | 264 | ||
| 265 | SharedPtr<Process>& GetOwnerProcess() { | 265 | Process* GetOwnerProcess() { |
| 266 | return owner_process; | 266 | return owner_process; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | const SharedPtr<Process>& GetOwnerProcess() const { | 269 | const Process* GetOwnerProcess() const { |
| 270 | return owner_process; | 270 | return owner_process; |
| 271 | } | 271 | } |
| 272 | 272 | ||
| @@ -386,7 +386,7 @@ private: | |||
| 386 | u64 tpidr_el0 = 0; ///< TPIDR_EL0 read/write system register. | 386 | u64 tpidr_el0 = 0; ///< TPIDR_EL0 read/write system register. |
| 387 | 387 | ||
| 388 | /// Process that owns this thread | 388 | /// Process that owns this thread |
| 389 | SharedPtr<Process> owner_process; | 389 | Process* owner_process; |
| 390 | 390 | ||
| 391 | /// Objects that the thread is waiting on, in the same order as they were | 391 | /// Objects that the thread is waiting on, in the same order as they were |
| 392 | /// passed to WaitSynchronization1/N. | 392 | /// passed to WaitSynchronization1/N. |
diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index c0a57e71f..37e15bad0 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp | |||
| @@ -15,7 +15,8 @@ namespace ArmTests { | |||
| 15 | TestEnvironment::TestEnvironment(bool mutable_memory_) | 15 | TestEnvironment::TestEnvironment(bool mutable_memory_) |
| 16 | : mutable_memory(mutable_memory_), test_memory(std::make_shared<TestMemory>(this)) { | 16 | : mutable_memory(mutable_memory_), test_memory(std::make_shared<TestMemory>(this)) { |
| 17 | 17 | ||
| 18 | Core::CurrentProcess() = Kernel::Process::Create(kernel, ""); | 18 | auto process = Kernel::Process::Create(kernel, ""); |
| 19 | kernel.MakeCurrentProcess(process.get()); | ||
| 19 | page_table = &Core::CurrentProcess()->VMManager().page_table; | 20 | page_table = &Core::CurrentProcess()->VMManager().page_table; |
| 20 | 21 | ||
| 21 | std::fill(page_table->pointers.begin(), page_table->pointers.end(), nullptr); | 22 | std::fill(page_table->pointers.begin(), page_table->pointers.end(), nullptr); |