From a0a38e1e84a5e387c063d83c48b52905b1107c3a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 3 Jul 2021 00:50:03 +0200 Subject: [PATCH] LibELF: Implement TLS relocation support for x86_64 --- Userland/Libraries/LibELF/DynamicLoader.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp index b09621490b..550e5a632d 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.cpp +++ b/Userland/Libraries/LibELF/DynamicLoader.cpp @@ -478,6 +478,9 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO #ifndef __LP64__ case R_386_TLS_TPOFF32: case R_386_TLS_TPOFF: { +#else + case R_X86_64_TPOFF64: { +#endif auto symbol = relocation.symbol(); // For some reason, LibC has a R_386_TLS_TPOFF that refers to the undefined symbol.. huh if (relocation.symbol_index() == 0) @@ -490,12 +493,6 @@ DynamicLoader::RelocationResult DynamicLoader::do_relocation(const ELF::DynamicO *patch_ptr = negative_offset_from_tls_block_end(res.value().value, dynamic_object_of_symbol->tls_offset().value(), res.value().size); break; } -#else - case R_X86_64_TPOFF64: - dbgln("FIXME: Patched R_X86_64_TPOFF64 relocation with invalid ptr."); - *patch_ptr = 0xaaaaaaaaaaaaaaaa; - break; -#endif #ifndef __LP64__ case R_386_JMP_SLOT: { #else