From d0bc0d2bc8e5898bed6dfa6f253d164e9fc149f4 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 8 Nov 2019 03:03:43 +0100 Subject: riscv64: implement NPTL/TLS basically from or1k port of uClibc-ng, with fixes for structures in pthreadtypes.h from 64 bit architectures. 18 testsuite failures counted. --- ldso/ldso/riscv64/elfinterp.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'ldso/ldso/riscv64/elfinterp.c') diff --git a/ldso/ldso/riscv64/elfinterp.c b/ldso/ldso/riscv64/elfinterp.c index b954779bd..8ddba1f9f 100644 --- a/ldso/ldso/riscv64/elfinterp.c +++ b/ldso/ldso/riscv64/elfinterp.c @@ -33,11 +33,6 @@ #include "ldso.h" -#if defined(USE_TLS) && USE_TLS -#include "dl-tls.h" -#include "tlsdeschtab.h" -#endif - extern int _dl_linux_resolve(void); unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) @@ -212,6 +207,18 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope, _dl_memcpy((void *) reloc_addr, (void *) symbol_addr, sym_ref.sym->st_size); break; +#if defined USE_TLS && USE_TLS + case R_RISCV_TLS_DTPMOD64: + *reloc_addr = tls_tpnt->l_tls_modid; + break; + case R_RISCV_TLS_DTPREL64: + *reloc_addr = symbol_addr; + break; + case R_RISCV_TLS_TPREL64: + CHECK_STATIC_TLS ((struct link_map *) tls_tpnt); + *reloc_addr = tls_tpnt->l_tls_offset + symbol_addr + rpnt->r_addend; + break; +#endif default: return -1; /*call _dl_exit(1) */ } -- cgit v1.2.3