musl/include
Rich Felker d5142642b8 pthread stack treatment overhaul for application-provided stacks, etc.
the main goal of these changes is to address the case where an
application provides a stack of size N, but TLS has size M that's a
significant portion of the size N (or even larger than N), thus giving
the application less stack space than it expected or no stack at all!

the new strategy pthread_create now uses is to only put TLS on the
application-provided stack if TLS is smaller than 1/8 of the stack
size or 2k, whichever is smaller. this ensures that the application
always has "close enough" to what it requested, and the threshold is
chosen heuristically to make sure "sane" amounts of TLS still end up
in the application-provided stack.

if TLS does not fit the above criteria, pthread_create uses mmap to
obtain space for TLS, but still uses the application-provided stack
for actual call frame stack. this is to avoid wasting memory, and for
the sake of supporting ugly hacks like garbage collection based on
assumptions that the implementation will use the provided stack range.

in order for the above heuristics to ever succeed, the amount of TLS
space wasted on POSIX TSD (pthread_key_create based) needed to be
reduced. otherwise, these changes would preclude any use of
pthread_create without mmap, which would have serious memory usage and
performance costs for applications trying to create huge numbers of
threads using pre-allocated stack space. the new value of
PTHREAD_KEYS_MAX is the minimum allowed by POSIX, 128. this should
still be plenty more than real-world applications need, especially now
that C11/gcc-style TLS is now supported in musl, and most apps and
libraries choose to use that instead of POSIX TSD when available.

at the same time, PTHREAD_STACK_MIN has been decreased. it was
originally set to PAGE_SIZE back when there was no support for TLS or
application-provided stacks, and requests smaller than a whole page
did not make sense. now, there are two good reasons to support
requests smaller than a page: (1) applications could provide
pre-allocated stacks smaller than a page, and (2) with smaller stack
sizes, stack+TLS+TSD can all fit in one page, making it possible for
applications which need huge numbers of threads with minimal stack
needs to allocate exactly one page per thread. the new value of
PTHREAD_STACK_MIN, 2k, is aligned with the minimum size for
sigaltstack.
2013-02-01 22:10:40 -05:00
..
arpa add inet_network (required for wine) 2012-12-19 07:32:38 +01:00
net default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
netinet SOL_TCP is nonstandard and not in the reserved namespace 2013-01-31 00:49:53 -05:00
netpacket
scsi add scsi headers scsi.h and sg.h 2012-12-05 12:35:24 -05:00
sys add MOD_TAI to sys/timex.h and update STA_RONLY 2013-01-12 19:42:39 +01:00
aio.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
alloca.h alloca cannot be a function. #define it to the gcc builtin if possible 2012-04-09 15:06:58 -04:00
ar.h some extra legacy header stuff 2012-05-06 16:35:32 -04:00
assert.h __assert_fail(): remove _Noreturn, to get proper stacktraces 2013-01-04 20:36:34 +01:00
byteswap.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
complex.h make CMPLX macros available in complex.h in non-c11 mode as well 2012-12-11 22:44:36 +01:00
cpio.h
crypt.h replace old and ugly crypt implementation 2012-06-29 00:56:37 -04:00
ctype.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
dirent.h feature test macros: make _GNU_SOURCE enable everything 2012-12-03 16:57:01 -05:00
dlfcn.h add RTLD_NODELETE flag for dlopen 2013-01-23 22:18:45 -05:00
elf.h microblaze TLS relocation support, completely untested 2012-10-15 21:01:48 -04:00
endian.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
err.h fix redundant _Noreturn def in err.h 2012-09-08 18:16:33 -04:00
errno.h remove useless "extern" keywords in headers 2012-01-26 10:53:37 -05:00
fcntl.h fix F_DUPFD_CLOEXEC being defined twice 2012-12-06 22:45:56 +01:00
features.h add _ALL_SOURCE as an alias for _GNU_SOURCE/enable-everything 2012-12-03 17:02:56 -05:00
fenv.h
float.h fix DECIMAL_DIG definitions 2012-03-21 12:42:48 -04:00
fnmatch.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
ftw.h remove unneeded judgemental commentary from ftw.h 2012-09-07 23:55:11 -04:00
getopt.h add getopt reset support 2012-09-30 20:00:38 -04:00
glob.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
grp.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
iconv.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
inttypes.h fix a couple issues in the inttypes.h PRI/SCN macros 2012-12-02 15:18:05 -05:00
iso646.h
langinfo.h
lastlog.h some extra legacy header stuff 2012-05-06 16:35:32 -04:00
libgen.h
libintl.h
limits.h pthread stack treatment overhaul for application-provided stacks, etc. 2013-02-01 22:10:40 -05:00
link.h link.h: expose glibc/svr4 dynlinker debugging glue 2012-12-19 05:08:13 +01:00
locale.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
malloc.h
math.h add legacy header values.h 2013-01-04 20:36:34 +01:00
memory.h add memory.h, bogus legacy alias for string.h 2012-03-01 01:34:58 -05:00
mntent.h
monetary.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
mqueue.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
netdb.h avoid breakage if somebody wrongly defines empty feature test macros 2012-11-01 03:49:43 -04:00
nl_types.h
paths.h header file fixes: multiple include guard consistency and correctness 2012-06-15 21:52:53 -04:00
poll.h add linux extension POLLRDHUP to poll.h 2012-12-26 16:55:49 -05:00
pthread.h add stub versions of some missing optional pthread interfaces 2012-11-17 18:42:16 -05:00
pty.h fix __cplusplus extern "C" closing brace in pty.h (typo?) 2011-11-10 21:01:24 -05:00
pwd.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
regex.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
resolv.h header file fixes: multiple include guard consistency and correctness 2012-06-15 21:52:53 -04:00
sched.h add support for thread scheduling (POSIX TPS option) 2012-11-11 15:38:04 -05:00
search.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
semaphore.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00
setjmp.h setjmp.h: add struct tag for sigjmp_buf (GCC C++ compatibility) 2013-01-04 20:36:34 +01:00
shadow.h
signal.h add sigandset and sigorset (needed for qemu) 2012-12-06 20:51:32 +01:00
spawn.h fix some restrict-qualifier mismatches in newly added interfaces 2012-11-27 09:44:30 -05:00
stdalign.h implement "low hanging fruit" from C11 2012-08-25 23:15:13 -04:00
stdarg.h
stdbool.h
stddef.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
stdint.h fix signedness errors in stdint.h constant macros 2012-06-08 11:11:44 -04:00
stdio.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
stdio_ext.h stdio_ext.h needs to include stdio.h, at least to get FILE... 2012-08-24 16:16:30 -04:00
stdlib.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
stdnoreturn.h add stdnoreturn.h (C11) 2012-09-08 00:14:25 -04:00
string.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
strings.h more locale_t interfaces (string stuff) and header updates 2012-02-06 21:51:02 -05:00
stropts.h add isastream (obsolete STREAMS junk) 2012-05-06 09:03:19 -04:00
syscall.h header file fixes: multiple include guard consistency and correctness 2012-06-15 21:52:53 -04:00
sysexits.h
syslog.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
tar.h
termios.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
tgmath.h math: more correct tgmath.h type cast logic 2012-12-19 10:57:54 +01:00
time.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
ucontext.h fixup mcontext stuff to expost gregset_t/fpregset_t as appropriate 2012-11-25 23:04:23 -05:00
ulimit.h
unistd.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
utime.h
utmp.h some extra legacy header stuff 2012-05-06 16:35:32 -04:00
utmpx.h
values.h add legacy header values.h 2013-01-04 20:36:34 +01:00
wchar.h use a common definition of NULL as 0L for C and C++ 2013-01-18 20:35:26 -05:00
wctype.h default features: make musl usable without feature test macros 2012-09-07 23:13:55 -04:00
wordexp.h remove all remaining redundant __restrict/__inline/_Noreturn defs 2012-09-08 17:14:52 -04:00