beginnings of full TLS support in shared libraries
this code will not work yet because the necessary relocations are not
supported, and cannot be supported without some internal changes to
how relocation processing works (coming soon).
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index 4e0b9f4..774ab84 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -654,6 +654,16 @@
return mem;
}
+void *__tls_get_addr(size_t *p)
+{
+ pthread_t self = __pthread_self();
+ if ((size_t)self->dtv[0] < p[0]) {
+ // FIXME: obtain new DTV and TLS from the DSO
+ a_crash();
+ }
+ return (char *)self->dtv[p[0]] + p[1];
+}
+
void *__dynlink(int argc, char **argv)
{
size_t aux[AUX_CNT] = {0};