diff options
author | Subv <subv2112@gmail.com> | 2015-05-11 01:35:37 +0200 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2015-05-11 01:35:37 +0200 |
commit | 000876858d52d7e4fa8e21bc4407d43d548eff30 (patch) | |
tree | f0af4cde78349cfe4ea7875b24d37cf85eb3eb03 /src/core/hle/kernel/thread.cpp | |
parent | Merge pull request #726 from bunnei/gpu-improvements (diff) | |
download | yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar.gz yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar.bz2 yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar.lz yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar.xz yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.tar.zst yuzu-000876858d52d7e4fa8e21bc4407d43d548eff30.zip |
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 0a3fd7cb1..61199c12a 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -402,9 +402,13 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, thread->name = std::move(name); thread->callback_handle = wakeup_callback_handle_table.Create(thread).MoveFrom(); + VAddr tls_address = Memory::TLS_AREA_VADDR + (thread->thread_id - 1) * 0x200; + + ASSERT_MSG(tls_address < Memory::TLS_AREA_VADDR_END, "Too many threads"); + // TODO(peachum): move to ScheduleThread() when scheduler is added so selected core is used // to initialize the context - Core::g_app_core->ResetContext(thread->context, stack_top, entry_point, arg); + Core::g_app_core->ResetContext(thread->context, stack_top, entry_point, arg, tls_address); ready_queue.push_back(thread->current_priority, thread.get()); thread->status = THREADSTATUS_READY; @@ -495,6 +499,10 @@ void Thread::SetWaitSynchronizationOutput(s32 output) { context.cpu_registers[1] = output; } +VAddr Thread::GetTLSAddress() const { + return context.tls; +} + //////////////////////////////////////////////////////////////////////////////////////////////////// void ThreadingInit() { |