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.
This commit is contained in:
Rich Felker
2012-10-04 16:35:46 -04:00
parent adefe830dd
commit 8431d7972f
6 changed files with 117 additions and 14 deletions

View File

@ -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 */