From ecd934951d163b0f2e33b60350fe2445476ff0f8 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Tue, 14 Dec 2021 14:53:16 -0700 Subject: [PATCH] R_X86_64_TPOFF64 does not require symbol, allow it to be unset --- src/ld_so/linker.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index 69ba71448..004d3a232 100644 --- a/src/ld_so/linker.rs +++ b/src/ld_so/linker.rs @@ -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); -- GitLab