From d13842454940bc7f5537161d885789111ffbbd43 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 29 Jun 2021 00:40:17 +0200 Subject: [PATCH] DynamicLoader: Implement self relocations for x86_64 --- Userland/DynamicLoader/main.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Userland/DynamicLoader/main.cpp b/Userland/DynamicLoader/main.cpp index 0b1924e5b80..bc18a5f3613 100644 --- a/Userland/DynamicLoader/main.cpp +++ b/Userland/DynamicLoader/main.cpp @@ -49,11 +49,13 @@ static void perform_self_relocations(auxv_t* auxvp) auto dynamic_object = ELF::DynamicObject::create({}, (VirtualAddress(base_address)), (VirtualAddress(dynamic_section_addr))); dynamic_object->relocation_section().for_each_relocation([base_address](auto& reloc) { - if (reloc.type() != R_386_RELATIVE) - return IterationDecision::Continue; +#if ARCH(I386) + VERIFY(reloc.type() == R_386_RELATIVE); +#else + VERIFY(reloc.type() == R_X86_64_RELATIVE); +#endif - *(u32*)reloc.address().as_ptr() += base_address; - return IterationDecision::Continue; + *(FlatPtr*)reloc.address().as_ptr() += base_address; }); }