[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>
|
2009-04-18 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* stdlib/strfmon_l.c (__vstrfmon_l): Don't wrap when computing width.
|
* 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)
|
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;
|
imap->l_need_tls_init = 0;
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
/* Update the slot information data for at least the
|
/* Update the slot information data for at least the
|
||||||
|
|
Loading…
Reference in New Issue