Lines Matching full:dtv

300 Elf_Addr tls_dtv_generation = 1; /* Used to detect when dtv size changes */
5285 Elf_Addr *newdtv, *dtv; in tls_get_addr_slow() local
5289 dtv = *dtvp; in tls_get_addr_slow()
5290 /* Check dtv generation in case new modules have arrived */ in tls_get_addr_slow()
5291 if (dtv[0] != tls_dtv_generation) { in tls_get_addr_slow()
5295 to_copy = dtv[1]; in tls_get_addr_slow()
5298 memcpy(&newdtv[2], &dtv[2], to_copy * sizeof(Elf_Addr)); in tls_get_addr_slow()
5301 free(dtv); in tls_get_addr_slow()
5304 dtv = *dtvp = newdtv; in tls_get_addr_slow()
5308 if (dtv[index + 1] == 0) { in tls_get_addr_slow()
5312 if (!dtv[index + 1]) in tls_get_addr_slow()
5313 dtv[index + 1] = (Elf_Addr)allocate_module_tls(index); in tls_get_addr_slow()
5317 return ((void *)(dtv[index + 1] + offset)); in tls_get_addr_slow()
5323 uintptr_t *dtv; in tls_get_addr_common() local
5325 dtv = *dtvp; in tls_get_addr_common()
5326 /* Check dtv generation in case new modules have arrived */ in tls_get_addr_common()
5327 if (__predict_true(dtv[0] == tls_dtv_generation && dtv[index + 1] != 0)) in tls_get_addr_common()
5328 return ((void *)(dtv[index + 1] + offset)); in tls_get_addr_common()
5369 Elf_Addr *dtv, **tcb; in allocate_tls() local
5399 /* Adjust the DTV. */ in allocate_tls()
5400 dtv = tcb[0]; in allocate_tls()
5401 for (i = 0; i < dtv[1]; i++) { in allocate_tls()
5402 if (dtv[i + 2] >= (Elf_Addr)oldtcb && in allocate_tls()
5403 dtv[i + 2] < (Elf_Addr)oldtcb + tls_static_space) { in allocate_tls()
5404 dtv[i + 2] = dtv[i + 2] - (Elf_Addr)oldtcb + in allocate_tls()
5409 dtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr)); in allocate_tls()
5410 tcb[0] = dtv; in allocate_tls()
5411 dtv[0] = tls_dtv_generation; in allocate_tls()
5412 dtv[1] = tls_max_index; in allocate_tls()
5433 dtv[obj->tlsindex + 1] = addr; in allocate_tls()
5443 Elf_Addr *dtv; in free_tls() local
5457 dtv = *(Elf_Addr **)tcb; in free_tls()
5458 dtvsize = dtv[1]; in free_tls()
5460 if (dtv[i + 2] != 0 && (dtv[i + 2] < tlsstart || in free_tls()
5461 dtv[i + 2] >= tlsend)) { in free_tls()
5462 free((void *)dtv[i + 2]); in free_tls()
5465 free(dtv); in free_tls()
5482 Elf_Addr *dtv, *olddtv; in allocate_tls() local
5493 dtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr)); in allocate_tls()
5497 ((Elf_Addr *)segbase)[1] = (Elf_Addr)dtv; in allocate_tls()
5499 dtv[0] = tls_dtv_generation; in allocate_tls()
5500 dtv[1] = tls_max_index; in allocate_tls()
5519 dtv[i + 2] = olddtv[i + 2]; in allocate_tls()
5541 dtv[obj->tlsindex + 1] = addr; in allocate_tls()
5551 Elf_Addr *dtv; in free_tls() local
5565 dtv = ((Elf_Addr **)tls)[1]; in free_tls()
5566 dtvsize = dtv[1]; in free_tls()
5570 if (dtv[i + 2] != 0 && (dtv[i + 2] < tlsstart || in free_tls()
5571 dtv[i + 2] > tlsend)) { in free_tls()
5572 free((void *)dtv[i + 2]); in free_tls()
5577 free((void *)dtv); in free_tls()