Просмотр исходного кода

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.
Waldemar Brodkorb 11 месяцев назад
Родитель
Сommit
94c1297d52
1 измененных файлов с 2 добавлено и 2 удалено
  1. 2 2
      ldso/ldso/aarch64/elfinterp.c

+ 2 - 2
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;
 					}
 				}