DynamicLoader: Implement self relocations for x86_64

This commit is contained in:
Gunnar Beutner 2021-06-29 00:40:17 +02:00 committed by Andreas Kling
parent 3cfe1a8914
commit d138424549
Notes: sideshowbarker 2024-07-18 11:20:39 +09:00

View File

@ -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))); auto dynamic_object = ELF::DynamicObject::create({}, (VirtualAddress(base_address)), (VirtualAddress(dynamic_section_addr)));
dynamic_object->relocation_section().for_each_relocation([base_address](auto& reloc) { dynamic_object->relocation_section().for_each_relocation([base_address](auto& reloc) {
if (reloc.type() != R_386_RELATIVE) #if ARCH(I386)
return IterationDecision::Continue; VERIFY(reloc.type() == R_386_RELATIVE);
#else
VERIFY(reloc.type() == R_X86_64_RELATIVE);
#endif
*(u32*)reloc.address().as_ptr() += base_address; *(FlatPtr*)reloc.address().as_ptr() += base_address;
return IterationDecision::Continue;
}); });
} }