the subsequent code in pthread_create and the code which copies TLS
initialization images to the new thread's TLS space assume that the
memory provided to them is zero-initialized, which is true when it's
obtained by pthread_create using mmap. however, when the caller
provides a stack using pthread_attr_setstack, pthread_create cannot
make any assumptions about the contents. simply zero-filling the
relevant memory in this case is the simplest and safest fix.
(cherry picked from commit
a6293285e930dbdb0eff47e29b513ca22537b1a2)
#include "stdio_impl.h"
#include "libc.h"
#include <sys/mman.h>
+#include <string.h>
static void dummy_0()
{
if (need < size/8 && need < 2048) {
tsd = stack - __pthread_tsd_size;
stack = tsd - libc.tls_size;
+ memset(stack, 0, need);
} else {
size = ROUND(need);
guard = 0;