diff --git a/CMakeLists.txt b/CMakeLists.txt index 992292e470c73d..62fd60c753420b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,6 +93,11 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +if("${SERENITY_ARCH}" STREQUAL "x86_64") + # FIXME: Implement TLS support and get rid of this + add_compile_definitions(NO_TLS X86_64_NO_TLS) +endif() + add_compile_options(-Wno-literal-suffix) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") add_compile_options(-fconcepts) diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index f88bc4d51e8011..dd0cc612044dd1 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -612,7 +612,7 @@ 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 - TODO(); + dbgln("FIXME: Not setting FS_BASE for process."); #endif return m_master_tls_region.unsafe_ptr()->vaddr().get(); diff --git a/Userland/Libraries/LibC/pthread_tls.cpp b/Userland/Libraries/LibC/pthread_tls.cpp index 6c32260dcd495f..393964a7ed10d5 100644 --- a/Userland/Libraries/LibC/pthread_tls.cpp +++ b/Userland/Libraries/LibC/pthread_tls.cpp @@ -26,7 +26,10 @@ struct SpecificTable { static KeyTable s_keys; -__thread SpecificTable t_specifics; +# ifndef X86_64_NO_TLS +__thread +# endif + SpecificTable t_specifics; int __pthread_key_create(pthread_key_t* key, KeyDestructor destructor) { diff --git a/Userland/Libraries/LibDl/dlfcn.cpp b/Userland/Libraries/LibDl/dlfcn.cpp index 077f62a101ef7f..861df60476dfaf 100644 --- a/Userland/Libraries/LibDl/dlfcn.cpp +++ b/Userland/Libraries/LibDl/dlfcn.cpp @@ -11,8 +11,16 @@ #include // FIXME: use thread_local and a String once TLS works -__thread char* s_dlerror_text = NULL; -__thread bool s_dlerror_retrieved = false; +#ifndef X86_64_NO_TLS +__thread +#endif + char* s_dlerror_text + = NULL; +#ifndef X86_64_NO_TLS +__thread +#endif + bool s_dlerror_retrieved + = false; static void store_error(const String& error) { diff --git a/Userland/Libraries/LibPthread/pthread.cpp b/Userland/Libraries/LibPthread/pthread.cpp index 763de5b74da17c..831145d106bc45 100644 --- a/Userland/Libraries/LibPthread/pthread.cpp +++ b/Userland/Libraries/LibPthread/pthread.cpp @@ -33,8 +33,14 @@ static constexpr size_t required_stack_alignment = 4 * MiB; static constexpr size_t highest_reasonable_guard_size = 32 * PAGE_SIZE; static constexpr size_t highest_reasonable_stack_size = 8 * MiB; // That's the default in Ubuntu? -__thread void* s_stack_location; -__thread size_t s_stack_size; +#ifndef X86_64_NO_TLS +__thread +#endif + void* s_stack_location; +#ifndef X86_64_NO_TLS +__thread +#endif + size_t s_stack_size; #define __RETURN_PTHREAD_ERROR(rc) \ return ((rc) < 0 ? -(rc) : 0)