about summary refs log tree commit diff
path: root/src/env/__libc_start_main.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-10-04 16:35:46 -0400
committerRich Felker <dalias@aerifal.cx>2012-10-04 16:35:46 -0400
commit8431d7972fd9be0fdcaff8516316d748e81724bb (patch)
tree53800c9deeaf26a9fedc5f9f574d9694315b510c /src/env/__libc_start_main.c
parentadefe830dd376be386df5650a09c313c483adf1a (diff)
downloadmusl-8431d7972fd9be0fdcaff8516316d748e81724bb.tar.gz
musl-8431d7972fd9be0fdcaff8516316d748e81724bb.tar.xz
musl-8431d7972fd9be0fdcaff8516316d748e81724bb.zip
TLS (GNU/C11 thread-local storage) support for static-linked programs
the design for TLS in dynamic-linked programs is mostly complete too,
but I have not yet implemented it. cost is nonzero but still low for
programs which do not use TLS and/or do not use threads (a few hundred
bytes of new code, plus dependency on memcpy). i believe it can be
made smaller at some point by merging __init_tls and __init_security
into __libc_start_main and avoiding duplicate auxv-parsing code.

at the same time, I've also slightly changed the logic pthread_create
uses to allocate guard pages to ensure that guard pages are not
counted towards commit charge.
Diffstat (limited to 'src/env/__libc_start_main.c')
-rw-r--r--src/env/__libc_start_main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c
index f31222b2..a38569d5 100644
--- a/src/env/__libc_start_main.c
+++ b/src/env/__libc_start_main.c
@@ -1,5 +1,6 @@
 #include "libc.h"
 
+void __init_tls(size_t *);
 void __init_security(size_t *);
 
 int __libc_start_main(
@@ -15,6 +16,7 @@ int __libc_start_main(
 	libc.ldso_fini = ldso_fini;
 	libc.fini = fini;
 
+	__init_tls((void *)auxv);
 	__init_security((void *)auxv);
 
 	/* Execute constructors (static) linked into the application */