summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt5
-rw-r--r--Kernel/Syscalls/mmap.cpp2
-rw-r--r--Userland/Libraries/LibC/pthread_tls.cpp5
-rw-r--r--Userland/Libraries/LibDl/dlfcn.cpp12
-rw-r--r--Userland/Libraries/LibPthread/pthread.cpp10
5 files changed, 28 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 992292e470..62fd60c753 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 f88bc4d51e..dd0cc61204 100644
--- a/Kernel/Syscalls/mmap.cpp
+++ b/Kernel/Syscalls/mmap.cpp
@@ -612,7 +612,7 @@ KResultOr<FlatPtr> Process::sys$allocate_tls(Userspace<const char*> 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 6c32260dcd..393964a7ed 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 077f62a101..861df60476 100644
--- a/Userland/Libraries/LibDl/dlfcn.cpp
+++ b/Userland/Libraries/LibDl/dlfcn.cpp
@@ -11,8 +11,16 @@
#include <string.h>
// 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 763de5b74d..831145d106 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)