Implement X86CallPCRel4 relocations in the JIT linker.

All calls inside a module are relocated with these.
This commit is contained in:
whitequark
2020-04-28 13:11:34 +00:00
committed by iximeow
parent 736766397e
commit a1dbeee062

View File

@@ -94,9 +94,14 @@ fn apply_reloc(
write_unaligned(reloc_address as *mut u32, reloc_delta_u32); write_unaligned(reloc_address as *mut u32, reloc_delta_u32);
}, },
#[cfg(target_pointer_width = "32")] #[cfg(target_pointer_width = "32")]
Reloc::X86CallPCRel4 => { Reloc::X86CallPCRel4 => unsafe {
// ignore let reloc_address = body.add(r.offset as usize) as usize;
} let reloc_addend = r.addend as isize;
let reloc_delta_u32 = (target_func_address as u32)
.wrapping_sub(reloc_address as u32)
.wrapping_add(reloc_addend as u32);
write_unaligned(reloc_address as *mut u32, reloc_delta_u32);
},
Reloc::X86PCRelRodata4 => { Reloc::X86PCRelRodata4 => {
// ignore // ignore
} }