Changeset View
Changeset View
Standalone View
Standalone View
libexec/rtld-elf/riscv/reloc.c
Show First 20 Lines • Show All 400 Lines • ▼ Show 20 Lines | tp = (Elf_Addr **)((char *)allocate_tls(objs, NULL, TLS_TCB_SIZE, 16) | ||||
+ TLS_TP_OFFSET + TLS_TCB_SIZE); | + TLS_TP_OFFSET + TLS_TCB_SIZE); | ||||
__asm __volatile("mv tp, %0" :: "r"(tp)); | __asm __volatile("mv tp, %0" :: "r"(tp)); | ||||
} | } | ||||
void * | void * | ||||
__tls_get_addr(tls_index* ti) | __tls_get_addr(tls_index* ti) | ||||
{ | { | ||||
char *_tp; | Elf_Addr **dtvp; | ||||
void *p; | void *p; | ||||
__asm __volatile("mv %0, tp" : "=r" (_tp)); | dtvp = _get_tp(); | ||||
p = tls_get_addr_common(dtvp, ti->ti_module, ti->ti_offset); | |||||
p = tls_get_addr_common((Elf_Addr**)((Elf_Addr)_tp - TLS_TP_OFFSET | |||||
- TLS_TCB_SIZE), ti->ti_module, ti->ti_offset); | |||||
return ((char*)p + TLS_DTV_OFFSET); | return ((char*)p + TLS_DTV_OFFSET); | ||||
} | } |