mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
Kernel: Implement TLS support for x86_64
This commit is contained in:
parent
04a912f68f
commit
c51b49a8cb
Notes:
sideshowbarker
2024-07-18 10:31:54 +09:00
Author: https://github.com/gunnarbeutner Commit: https://github.com/SerenityOS/serenity/commit/c51b49a8cb8 Pull-request: https://github.com/SerenityOS/serenity/pull/8414
|
@ -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);
|
auto& tls_descriptor = processor.get_gdt_entry(GDT_SELECTOR_TLS);
|
||||||
tls_descriptor.set_base(to_thread->thread_specific_data());
|
tls_descriptor.set_base(to_thread->thread_specific_data());
|
||||||
tls_descriptor.set_limit(to_thread->thread_specific_region_size());
|
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
|
#endif
|
||||||
|
|
||||||
if (from_regs.cr3 != to_regs.cr3)
|
if (from_regs.cr3 != to_regs.cr3)
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Kernel/Arch/x86/InterruptDisabler.h>
|
#include <Kernel/Arch/x86/InterruptDisabler.h>
|
||||||
|
#include <Kernel/Arch/x86/MSR.h>
|
||||||
#include <Kernel/Arch/x86/SmapDisabler.h>
|
#include <Kernel/Arch/x86/SmapDisabler.h>
|
||||||
#include <Kernel/FileSystem/FileDescription.h>
|
#include <Kernel/FileSystem/FileDescription.h>
|
||||||
#include <Kernel/PerformanceEventBuffer.h>
|
#include <Kernel/PerformanceEventBuffer.h>
|
||||||
|
@ -618,7 +619,8 @@ KResultOr<FlatPtr> Process::sys$allocate_tls(Userspace<const char*> initial_data
|
||||||
tls_descriptor.set_base(main_thread->thread_specific_data());
|
tls_descriptor.set_base(main_thread->thread_specific_data());
|
||||||
tls_descriptor.set_limit(main_thread->thread_specific_region_size());
|
tls_descriptor.set_limit(main_thread->thread_specific_region_size());
|
||||||
#else
|
#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
|
#endif
|
||||||
|
|
||||||
return m_master_tls_region.unsafe_ptr()->vaddr().get();
|
return m_master_tls_region.unsafe_ptr()->vaddr().get();
|
||||||
|
|
Loading…
Reference in a new issue