aboutsummaryrefslogtreecommitdiff
path: root/nptl/nptl-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/nptl-init.c')
-rw-r--r--nptl/nptl-init.c74
1 files changed, 22 insertions, 52 deletions
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 50148224e8..19e6616420 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -276,26 +276,8 @@ extern void **__libc_dl_error_tsd (void) __attribute__ ((const));
/* This can be set by the debugger before initialization is complete. */
static bool __nptl_initial_report_events __attribute_used__;
-static void
-set_default_stacksize (size_t stacksize)
-{
- if (stacksize < PTHREAD_STACK_MIN)
- stacksize = PTHREAD_STACK_MIN;
-
- /* Make sure it meets the minimum size that allocate_stack
- (allocatestack.c) will demand, which depends on the page size. */
- const uintptr_t pagesz = GLRO(dl_pagesize);
- const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
-
- if (stacksize < minstack)
- stacksize = minstack;
-
- /* Round the resource limit up to page size. */
- stacksize = (stacksize + pagesz - 1) & -pagesz;
- __default_stacksize = stacksize;
-}
void
-__pthread_initialize_minimal_internal (int argc, char **argv, char **envp)
+__pthread_initialize_minimal_internal (void)
{
#ifndef SHARED
/* Unlike in the dynamically linked case the dynamic linker has not
@@ -419,41 +401,29 @@ __pthread_initialize_minimal_internal (int argc, char **argv, char **envp)
__static_tls_size = roundup (__static_tls_size, static_tls_align);
- /* Initialize the environment. libc.so gets initialized after us due to a
- circular dependency and hence __environ is not available otherwise. */
- __environ = envp;
-
-#ifndef SHARED
- __libc_init_secure ();
-#endif
-
- size_t stacksize = 0;
- char *envval = __libc_secure_getenv ("GLIBC_PTHREAD_DEFAULT_STACKSIZE");
-
- if (__glibc_unlikely (envval != NULL && envval[0] != '\0'))
- {
- char *env_conv = envval;
- size_t ret = strtoul (envval, &env_conv, 0);
+ /* Determine the default allowed stack size. This is the size used
+ in case the user does not specify one. */
+ struct rlimit limit;
+ if (getrlimit (RLIMIT_STACK, &limit) != 0
+ || limit.rlim_cur == RLIM_INFINITY)
+ /* The system limit is not usable. Use an architecture-specific
+ default. */
+ limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE;
+ else if (limit.rlim_cur < PTHREAD_STACK_MIN)
+ /* The system limit is unusably small.
+ Use the minimal size acceptable. */
+ limit.rlim_cur = PTHREAD_STACK_MIN;
- if (*env_conv == '\0' && env_conv != envval)
- stacksize = ret;
- }
-
- if (stacksize == 0)
- {
- /* Determine the default allowed stack size. This is the size used
- in case the user does not specify one. */
- struct rlimit limit;
- if (getrlimit (RLIMIT_STACK, &limit) != 0
- || limit.rlim_cur == RLIM_INFINITY)
- /* The system limit is not usable. Use an architecture-specific
- default. */
- stacksize = ARCH_STACK_DEFAULT_SIZE;
- else
- stacksize = limit.rlim_cur;
- }
+ /* Make sure it meets the minimum size that allocate_stack
+ (allocatestack.c) will demand, which depends on the page size. */
+ const uintptr_t pagesz = GLRO(dl_pagesize);
+ const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
+ if (limit.rlim_cur < minstack)
+ limit.rlim_cur = minstack;
- set_default_stacksize (stacksize);
+ /* Round the resource limit up to page size. */
+ limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
+ __default_stacksize = limit.rlim_cur;
#ifdef SHARED
/* Transfer the old value from the dynamic linker's internal location. */