From e9c6e0129494b1265be8ff6477aa2208f18e3273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Miko=C5=82ajczyk?= Date: Sat, 24 Feb 2024 09:43:05 +0000 Subject: [PATCH] Handle R_X86_64_DTPOFF64 (#655) Co-authored-by: SuchAFuriousDeath <48620541+SuchAFuriousDeath@users.noreply.github.com> --- src/kernel/src/rtld/mod.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/kernel/src/rtld/mod.rs b/src/kernel/src/rtld/mod.rs index 26b7a620d..51944c460 100644 --- a/src/kernel/src/rtld/mod.rs +++ b/src/kernel/src/rtld/mod.rs @@ -799,6 +799,19 @@ impl RuntimeLinker { (Relocated::Tls((md, index)), value) } + Relocation::R_X86_64_DTPOFF64 => { + let md = match resolver.resolve_with_local(md, sym, symflags) { + Some((md, _)) => md, + None => continue, + }; + + let sym = md.symbol(sym).unwrap(); + let value = unsafe { read_unaligned::(target.as_ptr().cast()) }; + + let relocated = (value + sym.value()).wrapping_add_signed(addend); + + (Relocated::Data((md, relocated)), relocated) + } v => return Err(RelocateError::UnsupportedRela(md.path().to_owned(), v)), };