From c51b49a8cb8901eb36860718495cccf2d5f05eea Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 3 Jul 2021 00:25:44 +0200 Subject: [PATCH] Kernel: Implement TLS support for x86_64 --- Kernel/Arch/x86/common/Processor.cpp | 3 +++ Kernel/Syscalls/mmap.cpp | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Kernel/Arch/x86/common/Processor.cpp b/Kernel/Arch/x86/common/Processor.cpp index 90a2b3af3bc..263cb6803b4 100644 --- a/Kernel/Arch/x86/common/Processor.cpp +++ b/Kernel/Arch/x86/common/Processor.cpp @@ -1214,6 +1214,9 @@ extern "C" void enter_thread_context(Thread* from_thread, Thread* to_thread) auto& tls_descriptor = processor.get_gdt_entry(GDT_SELECTOR_TLS); tls_descriptor.set_base(to_thread->thread_specific_data()); tls_descriptor.set_limit(to_thread->thread_specific_region_size()); +#else + MSR fs_base_msr(MSR_FS_BASE); + fs_base_msr.set(to_thread->thread_specific_data().get()); #endif if (from_regs.cr3 != to_regs.cr3) diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index 3a44c41b1c2..cc6cc1fa1f9 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -618,7 +619,8 @@ KResultOr Process::sys$allocate_tls(Userspace initial_data tls_descriptor.set_base(main_thread->thread_specific_data()); tls_descriptor.set_limit(main_thread->thread_specific_region_size()); #else - dbgln("FIXME: Not setting FS_BASE for process."); + MSR fs_base_msr(MSR_FS_BASE); + fs_base_msr.set(main_thread->thread_specific_data().get()); #endif return m_master_tls_region.unsafe_ptr()->vaddr().get();