dtv
struct dtv *dtv;
dtv = ((struct tcb *)tcb)->tcb_dtv;
__je_bootstrap_free(dtv);
struct dtv *dtv;
dtv = tcb->tcb_dtv;
dtv->dtv_slots[0].dtvs_tls = tls;
dtv = __je_bootstrap_malloc(sizeof(struct dtv) +
if (dtv == NULL) {
tcb->tcb_dtv = dtv;
dtv->dtv_gen = 1; /* Generation. */
dtv->dtv_size = 1; /* Segments count. */
dtv->dtv_slots[0].dtvs_tls = tls;
struct dtv *dtv;
dtv = ((struct tcb *)tcb)->tcb_dtv;
__je_bootstrap_free(dtv);
struct dtv *dtv;
dtv = __je_bootstrap_malloc(sizeof(struct dtv) +
if (dtv == NULL) {
tcb->tcb_dtv = dtv;
dtv->dtv_gen = 1;
dtv->dtv_size = 1;
dtv->dtv_slots[0].dtvs_tls = tls;
struct dtv *dtv;
dtv = _tcb_get()->tcb_dtv;
return (dtv->dtv_slots[ti->ti_module - 1].dtvs_tls +
struct dtv *newdtv, *dtv;
dtv = tcb->tcb_dtv;
if (dtv->dtv_gen != tls_dtv_generation) {
newdtv = xcalloc(1, sizeof(struct dtv) + tls_max_index *
to_copy = dtv->dtv_size;
memcpy(newdtv->dtv_slots, dtv->dtv_slots, to_copy *
free(dtv);
dtv = tcb->tcb_dtv = newdtv;
if (dtv->dtv_slots[index - 1].dtvs_tls == 0) {
if (!dtv->dtv_slots[index - 1].dtvs_tls)
dtv->dtv_slots[index - 1].dtvs_tls =
return (dtv->dtv_slots[index - 1].dtvs_tls + offset);
struct dtv *dtv;
dtv = tcb->tcb_dtv;
if (__predict_true(dtv->dtv_gen == tls_dtv_generation &&
dtv->dtv_slots[index - 1].dtvs_tls != 0))
return (dtv->dtv_slots[index - 1].dtvs_tls + offset);
struct dtv *dtv;
dtv = tcb->tcb_dtv;
for (i = 0; i < dtv->dtv_size; i++) {
if ((uintptr_t)dtv->dtv_slots[i].dtvs_tls >=
(uintptr_t)dtv->dtv_slots[i].dtvs_tls <
dtv->dtv_slots[i].dtvs_tls = (char *)tcb +
(dtv->dtv_slots[i].dtvs_tls -
dtv = xcalloc(1, sizeof(struct dtv) + tls_max_index *
tcb->tcb_dtv = dtv;
dtv->dtv_gen = tls_dtv_generation;
dtv->dtv_size = tls_max_index;
dtv->dtv_slots[obj->tlsindex - 1].dtvs_tls = addr;
struct dtv *dtv;
dtv = ((struct tcb *)tcb)->tcb_dtv;
for (i = 0; i < dtv->dtv_size; i++) {
if (dtv->dtv_slots[i].dtvs_tls != NULL &&
((uintptr_t)dtv->dtv_slots[i].dtvs_tls < tlsstart ||
(uintptr_t)dtv->dtv_slots[i].dtvs_tls >= tlsend)) {
free(dtv->dtv_slots[i].dtvs_tls);
free(dtv);
struct dtv *dtv, *olddtv;
dtv = xcalloc(1, sizeof(struct dtv) + tls_max_index *
tcb->tcb_dtv = dtv;
dtv->dtv_gen = tls_dtv_generation;
dtv->dtv_size = tls_max_index;
dtv->dtv_slots[i].dtvs_tls =
dtv->dtv_slots[obj->tlsindex - 1].dtvs_tls = addr;
struct dtv *dtv;
dtv = ((struct tcb *)tcb)->tcb_dtv;
for (i = 0; i < dtv->dtv_size; i++) {
if (dtv->dtv_slots[i].dtvs_tls != NULL &&
((uintptr_t)dtv->dtv_slots[i].dtvs_tls < tlsstart ||
(uintptr_t)dtv->dtv_slots[i].dtvs_tls > tlsend)) {
free(dtv->dtv_slots[i].dtvs_tls);
free(dtv);
GMUX(0x17C, S, 1, uart3_cts_n_pa1, uartc, sdmmc1, dtv, gmi),
GMUX(0x180, C, 0, uart3_rts_n_pc0, uartc, pwm0, dtv, gmi),
GMUX(0x1A8, P, 3, dap4_fs_pp4, i2s3, gmi, dtv, rsvd4),
GMUX(0x1B0, P, 5, dap4_dout_pp6, i2s3, gmi, dtv, rsvd4),
GMUX(0x1C8, I, 7, pi7, rsvd1, trace, gmi, dtv),
GMUX(0x210, H, 0, ph0, pwm0, trace, gmi, dtv),
GMUX(0x228, H, 6, ph6, sdmmc2, trace, gmi, dtv),
GMUX(0x22C, H, 7, ph7, sdmmc2, trace, gmi, dtv),
GMUX(0x064, B, 4, spi2_mosi_pb4, spi2, dtv, rsvd2, rsvd3, 0xaf4, 0, 0, 0, 0),
GMUX(0x068, B, 5, spi2_miso_pb5, spi2, dtv, rsvd2, rsvd3, 0xaf0, 0, 0, 0, 0),
GMUX(0x06c, B, 6, spi2_sck_pb6, spi2, dtv, rsvd2, rsvd3, 0xaf8, 0, 0, 0, 0),
GMUX(0x070, B, 7, spi2_cs0_pb7, spi2, dtv, rsvd2, rsvd3, 0xae8, 0, 0, 0, 0),
struct dtv *tcb_dtv; /* required by rtld */
struct dtv *tcb_dtv; /* required by rtld */