mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
[BZ #10069]
2009-04-19 Ulrich Drepper <drepper@redhat.com> [BZ #10069] * elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load an object that uses static TLS if the TLS modid is higher than the reserve we always allocate. At least for multi-threaded code.
This commit is contained in:
parent
153aa31b93
commit
a245eafd2b
@ -1,3 +1,10 @@
|
||||
2009-04-19 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #10069]
|
||||
* elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load
|
||||
an object that uses static TLS if the TLS modid is higher than the
|
||||
reserve we always allocate. At least for multi-threaded code.
|
||||
|
||||
2009-04-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* stdlib/strfmon_l.c (__vstrfmon_l): Don't wrap when computing width.
|
||||
|
@ -490,6 +490,18 @@ dl_open_worker (void *a)
|
||||
|
||||
if (imap->l_need_tls_init)
|
||||
{
|
||||
/* For static TLS we have to allocate the memory here
|
||||
and now. This includes allocating memory in the DTV.
|
||||
But we cannot change any DTV other than our own. So,
|
||||
if we cannot guarantee that there is room in the DTV
|
||||
we don't even try it and fail the load.
|
||||
|
||||
XXX We could track the minimum DTV slots allocated in
|
||||
all threads. */
|
||||
if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
|
||||
_dl_signal_error (0, "dlopen", NULL, N_("\
|
||||
cannot load any more object with static TLS"));
|
||||
|
||||
imap->l_need_tls_init = 0;
|
||||
#ifdef SHARED
|
||||
/* Update the slot information data for at least the
|
||||
|
Loading…
Reference in New Issue
Block a user