summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2025-09-15 20:35:18 +0000
committerWaldemar Brodkorb <wbx@freewrt.de>2025-09-17 19:09:09 +0200
commit94c1297d52263e20cd9715601afa37f49d008d93 (patch)
tree02a95e3b30ffcd999005d4204a43be0c51c556c5
parent31c044efbb0ac030caf427caa5799b013b3a536e (diff)
aarch64: respect r_addend for TLSDESC relocations
This fixes a long standing bug in the ldso code for aarch64. It fixes the newly problems occuring with python3, where python3 is segfaulting on startup.
-rw-r--r--ldso/ldso/aarch64/elfinterp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ldso/ldso/aarch64/elfinterp.c b/ldso/ldso/aarch64/elfinterp.c
index 9365569cc..d8530ecd1 100644
--- a/ldso/ldso/aarch64/elfinterp.c
+++ b/ldso/ldso/aarch64/elfinterp.c
@@ -227,13 +227,13 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
#else
if (!TRY_STATIC_TLS ((struct link_map *) tls_tpnt))
{
- td->arg = _dl_make_tlsdesc_dynamic((struct link_map *) tls_tpnt, symbol_addr);
+ td->arg = _dl_make_tlsdesc_dynamic((struct link_map *) tls_tpnt, symbol_addr + rpnt->r_addend);
td->entry = _dl_tlsdesc_dynamic;
}
else
#endif
{
- td->arg = (void*)(symbol_addr + tls_tpnt->l_tls_offset);
+ td->arg = (void*)(symbol_addr + tls_tpnt->l_tls_offset + rpnt->r_addend);
td->entry = _dl_tlsdesc_return;
}
}