From de00d6c6b94eb393f8cdeca376009088e0c29222 Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Thu, 5 Dec 2024 23:34:16 +1100 Subject: [PATCH] fix(ld.so): temporary fix Signed-off-by: Anhad Singh --- src/ld_so/linker.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index 175cb62a8d..ace6508746 100644 --- a/src/ld_so/linker.rs +++ b/src/ld_so/linker.rs @@ -206,14 +206,20 @@ impl Linker { continue; } + let dtv_idx = obj.tls_module_id - 1; + if cfg!(any(target_arch = "x86", target_arch = "x86_64")) { // Below the TP - tcb.dtv_mut().unwrap()[obj.tls_module_id - 1] = - tcb_ptr.cast::().sub(obj.tls_offset); + tcb.dtv_mut().unwrap()[dtv_idx] = tcb_ptr.cast::().sub(obj.tls_offset); } else { - // Above the TP - tcb.dtv_mut().unwrap()[obj.tls_module_id - 1] = - tcb_ptr.add(1).cast::().add(obj.tls_offset); + // FIMXE(andypython): Make it above the TP + // + // tcb.dtv_mut().unwrap()[obj.tls_module_id - 1] = + // tcb_ptr.add(1).cast::().add(obj.tls_offset); + // + // FIXME(andypython): https://gitlab.redox-os.org/redox-os/relibc/-/merge_requests/570#note_35788 + tcb.dtv_mut().unwrap()[dtv_idx] = + tcb.tls_end.sub(tcb.tls_len).add(obj.tls_offset); } }