Browse Source

xtensa: fix R_XTENSA_TLSDESC_ARG handling in _dl_do_reloc

R_XTENSA_TLSDESC_ARG is a true RELA relocation, the addend is in the
relocation record itself, not in place.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Max Filippov 6 years ago
parent
commit
a9a752b0ce
1 changed files with 3 additions and 2 deletions
  1. 3 2
      ldso/ldso/xtensa/elfinterp.c

+ 3 - 2
ldso/ldso/xtensa/elfinterp.c

@@ -244,10 +244,11 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
 		if (!TRY_STATIC_TLS ((struct link_map *) tls_tpnt))
 			*reloc_addr = (ElfW(Addr))
 				_dl_make_tlsdesc_dynamic((struct link_map *) tls_tpnt,
-										 symbol_addr + *reloc_addr);
+							 symbol_addr + rpnt->r_addend);
 		else
 #endif
-			*reloc_addr += symbol_addr + tls_tpnt->l_tls_offset;
+			*reloc_addr = symbol_addr + rpnt->r_addend +
+				tls_tpnt->l_tls_offset;
 		break;
 #endif