[PATCH]: Add to the stack size the TLS size before allocating
asharif tools
asharif.tools@gmail.com
Fri Mar 23 17:45:00 GMT 2012
Currently glibc subtracts from the stack size the TLS size and the
stack allocation can fail when the TLS is large enough. See this bug:
http://sourceware.org/bugzilla/show_bug.cgi?id=11787. This patch
addresses that:
http://sourceware.org/bugzilla/show_bug.cgi?id=11787
When stackallocate() is called, glibc allocates a stack space of:
requested_size - TLS_size. The TLS_size could be anything, and in the case of
Chrome built with -fprofile-generate, is large enough so stack allocation fails.
This patch increases the stack size by the TLS_size so that stack allocation
doesn't fail when the TLS is larger than the request size.
--- ./glibc-2.11.1/nptl/allocatestack.c 2012-03-21 22:36:08.810112972 -0700
+++ ./glibc-2.11.1/nptl/allocatestack.c 2012-03-21 22:39:59.469273930 -0700
@@ -349,6 +349,10 @@
/* Get the stack size from the attribute if it is set. Otherwise we
use the default we determined at start time. */
size = attr->stacksize ?: __default_stacksize;
+ size += __static_tls_size;
+#if TLS_TCB_AT_TP
+ size += TLS_TCB_SIZE;
+#endif
/* Get memory for the stack. */
if (__builtin_expect (attr->flags & ATTR_FLAG_STACKADDR, 0))
@@ -358,7 +363,7 @@
/* If the user also specified the size of the stack make sure it
is large enough. */
if (attr->stacksize != 0
- && attr->stacksize < (__static_tls_size + MINIMAL_REST_STACK))
+ && attr->stacksize < (MINIMAL_REST_STACK))
return EINVAL;
/* Adjust stack size for alignment of the TLS block. */
Any feedback on this patch would be appreciated.
More information about the Libc-alpha
mailing list