R_X86_64_TPOFF64 does not require symbol, allow it to be unset

This commit is contained in:
Jeremy Soller
2021-12-14 14:53:16 -07:00
parent e90fa3e32f
commit ecd934951d
+8 -4
View File
@@ -398,10 +398,14 @@ impl Linker {
set_u64((b + a) as u64);
}
reloc::R_X86_64_TPOFF64 => {
let sym = symbol
.as_ref()
.expect("R_X86_64_TPOFF64 called without valid symbol");
set_u64((sym.value + a).wrapping_sub(t) as u64);
if rel.r_sym > 0 {
let sym = symbol
.as_ref()
.expect("R_X86_64_TPOFF64 called without valid symbol");
set_u64((sym.value + a).wrapping_sub(t) as u64);
} else {
set_u64(a.wrapping_sub(t) as u64);
}
}
reloc::R_X86_64_IRELATIVE => unsafe {
let f: unsafe extern "C" fn() -> u64 = transmute(b + a);