Changeset View
Changeset View
Standalone View
Standalone View
libexec/rtld-elf/aarch64/reloc.c
Show First 20 Lines • Show All 528 Lines • ▼ Show 20 Lines | allocate_initial_tls(Obj_Entry *objs) | ||||
tp = (Elf_Addr **) allocate_tls(objs, NULL, TLS_TCB_SIZE, 16); | tp = (Elf_Addr **) allocate_tls(objs, NULL, TLS_TCB_SIZE, 16); | ||||
asm volatile("msr tpidr_el0, %0" : : "r"(tp)); | asm volatile("msr tpidr_el0, %0" : : "r"(tp)); | ||||
} | } | ||||
void * | void * | ||||
__tls_get_addr(tls_index* ti) | __tls_get_addr(tls_index* ti) | ||||
{ | { | ||||
char *p; | Elf_Addr **dtvp; | ||||
void *_tp; | |||||
__asm __volatile("mrs %0, tpidr_el0" : "=r" (_tp)); | dtvp = _get_tp(); | ||||
p = tls_get_addr_common((Elf_Addr **)(_tp), ti->ti_module, ti->ti_offset); | return (tls_get_addr_common(dtvp, ti->ti_module, ti->ti_offset)); | ||||
return (p); | |||||
} | } |