Page MenuHomeFreeBSD

D50228.id155025.diff
No OneTemporary

D50228.id155025.diff

diff --git a/lib/libc/gen/tls.c b/lib/libc/gen/tls.c
--- a/lib/libc/gen/tls.c
+++ b/lib/libc/gen/tls.c
@@ -201,10 +201,8 @@
__libc_free_tls(void *tcb, size_t tcbsize, size_t tcbalign __unused)
{
uintptr_t *dtv;
- uintptr_t **tls;
- tls = (uintptr_t **)tcb;
- dtv = tls[0];
+ dtv = ((struct tcb *)tcb)->tcb_dtv;
__je_bootstrap_free(dtv);
libc_free_aligned(get_tls_block_ptr(tcb, tcbsize));
}
@@ -232,7 +230,8 @@
void *
__libc_allocate_tls(void *oldtcb, size_t tcbsize, size_t tcbalign)
{
- uintptr_t *dtv, **tcb;
+ uintptr_t *dtv;
+ struct tcb *tcb;
char *tls_block, *tls;
size_t extra_size, maxalign, post_size, pre_size, tls_block_size;
@@ -261,7 +260,7 @@
abort();
}
memset(tls_block, 0, tls_block_size);
- tcb = (uintptr_t **)(tls_block + pre_size + extra_size);
+ tcb = (struct tcb *)(tls_block + pre_size + extra_size);
tls = (char *)tcb + TLS_TCB_SIZE + post_size;
if (oldtcb != NULL) {
@@ -270,7 +269,7 @@
libc_free_aligned(oldtcb);
/* Adjust the DTV. */
- dtv = tcb[0];
+ dtv = tcb->tcb_dtv;
dtv[2] = (uintptr_t)tls;
} else {
dtv = __je_bootstrap_malloc(3 * sizeof(uintptr_t));
@@ -279,7 +278,7 @@
abort();
}
/* Build the DTV. */
- tcb[0] = dtv;
+ tcb->tcb_dtv = dtv;
dtv[0] = 1; /* Generation. */
dtv[1] = 1; /* Segments count. */
dtv[2] = (uintptr_t)tls;
@@ -312,7 +311,7 @@
tcbalign = MAX(tcbalign, libc_tls_init_align);
size = roundup2(libc_tls_static_space, tcbalign);
- dtv = ((uintptr_t **)tcb)[1];
+ dtv = ((struct tcb *)tcb)->tcb_dtv;
tlsend = (uintptr_t)tcb;
tlsstart = tlsend - size;
libc_free_aligned((void*)tlsstart);
@@ -327,7 +326,8 @@
{
size_t size;
char *tls_block, *tls;
- uintptr_t *dtv, **tcb;
+ uintptr_t *dtv;
+ struct tcb *tcb;
tcbalign = MAX(tcbalign, libc_tls_init_align);
size = roundup2(libc_tls_static_space, tcbalign);
@@ -346,10 +346,10 @@
abort();
}
- tcb = (uintptr_t **)(tls_block + size);
+ tcb = (struct tcb *)(tls_block + size);
tls = (char *)tcb - libc_tls_static_space;
- tcb[0] = (uintptr_t *)tcb;
- tcb[1] = dtv;
+ tcb->tcb_self = tcb;
+ tcb->tcb_dtv = dtv;
dtv[0] = 1;
dtv[1] = 1;

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 31, 1:29 PM (10 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30595061
Default Alt Text
D50228.id155025.diff (2 KB)

Event Timeline