mirror of git://sourceware.org/git/glibc.git
2005-12-12 Roland McGrath <roland@redhat.com>
* init.c (__pthread_initialize_minimal_internal): Do __static_tls_size adjustments before choosing stack size. Update minimum stack size calculation to match allocate_stack change.
This commit is contained in:
parent
db13ddbcfa
commit
b399707ead
25
nptl/init.c
25
nptl/init.c
|
|
@ -289,6 +289,17 @@ __pthread_initialize_minimal_internal (void)
|
||||||
(void) INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_UNBLOCK, &sa.sa_mask,
|
(void) INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_UNBLOCK, &sa.sa_mask,
|
||||||
NULL, _NSIG / 8);
|
NULL, _NSIG / 8);
|
||||||
|
|
||||||
|
/* Get the size of the static and alignment requirements for the TLS
|
||||||
|
block. */
|
||||||
|
size_t static_tls_align;
|
||||||
|
_dl_get_tls_static_info (&__static_tls_size, &static_tls_align);
|
||||||
|
|
||||||
|
/* Make sure the size takes all the alignments into account. */
|
||||||
|
if (STACK_ALIGN > static_tls_align)
|
||||||
|
static_tls_align = STACK_ALIGN;
|
||||||
|
__static_tls_align_m1 = static_tls_align - 1;
|
||||||
|
|
||||||
|
__static_tls_size = roundup (__static_tls_size, static_tls_align);
|
||||||
|
|
||||||
/* Determine the default allowed stack size. This is the size used
|
/* Determine the default allowed stack size. This is the size used
|
||||||
in case the user does not specify one. */
|
in case the user does not specify one. */
|
||||||
|
|
@ -306,7 +317,7 @@ __pthread_initialize_minimal_internal (void)
|
||||||
/* Make sure it meets the minimum size that allocate_stack
|
/* Make sure it meets the minimum size that allocate_stack
|
||||||
(allocatestack.c) will demand, which depends on the page size. */
|
(allocatestack.c) will demand, which depends on the page size. */
|
||||||
const uintptr_t pagesz = __sysconf (_SC_PAGESIZE);
|
const uintptr_t pagesz = __sysconf (_SC_PAGESIZE);
|
||||||
const size_t minstack = pagesz * 2 + __static_tls_size + MINIMAL_REST_STACK;
|
const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
|
||||||
if (limit.rlim_cur < minstack)
|
if (limit.rlim_cur < minstack)
|
||||||
limit.rlim_cur = minstack;
|
limit.rlim_cur = minstack;
|
||||||
|
|
||||||
|
|
@ -314,18 +325,6 @@ __pthread_initialize_minimal_internal (void)
|
||||||
limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
|
limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
|
||||||
__default_stacksize = limit.rlim_cur;
|
__default_stacksize = limit.rlim_cur;
|
||||||
|
|
||||||
/* Get the size of the static and alignment requirements for the TLS
|
|
||||||
block. */
|
|
||||||
size_t static_tls_align;
|
|
||||||
_dl_get_tls_static_info (&__static_tls_size, &static_tls_align);
|
|
||||||
|
|
||||||
/* Make sure the size takes all the alignments into account. */
|
|
||||||
if (STACK_ALIGN > static_tls_align)
|
|
||||||
static_tls_align = STACK_ALIGN;
|
|
||||||
__static_tls_align_m1 = static_tls_align - 1;
|
|
||||||
|
|
||||||
__static_tls_size = roundup (__static_tls_size, static_tls_align);
|
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
/* Transfer the old value from the dynamic linker's internal location. */
|
/* Transfer the old value from the dynamic linker's internal location. */
|
||||||
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
*__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue