1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

* sysdeps/generic/libc-tls.c (__libc_setup_tls): Initialize the static

slotinfo list's len member to the proper size, not just 1.
	Initialize static_map.l_tls_initimage.

	* elf/dl-open.c (dl_open_worker): Fix loop searching for
	dtv_slotinfo_list element containing new modules' l_tls_modid.

	* elf/tst-tls9.c, elf/tst-tls9-static.c: New files.
	* elf/tst-tlsmod5.c, elf/tst-tlsmod6.c: New files.
	* elf/Makefile (tests): Add tst-tls9.
	(tests-static): Add tst-tls9-static.
	(tst-tls9-static-ENV): New variable.
	($(objpfx)tst-tls9-static, $(objpfx)tst-tls9-static.out): New targets.

	* elf/dl-close.c (remove_slotinfo): Remove an assert; the number of
	modids used by partially loaded modules being closed can't be known.
This commit is contained in:
Roland McGrath
2002-10-22 06:22:53 +00:00
parent 6ef518c323
commit 8265947da0
4 changed files with 34 additions and 11 deletions

View File

@ -378,17 +378,19 @@ dl_open_worker (void *a)
assert (new->l_searchlist.r_list[i]->l_type == lt_loaded);
/* Find the place in the stv slotinfo list. */
/* Find the place in the dtv slotinfo list. */
listp = GL(dl_tls_dtv_slotinfo_list);
prevp = NULL; /* Needed to shut up gcc. */
do
{
/* Does it fit in the array of this list element? */
if (idx <= listp->len)
if (idx < listp->len)
break;
idx -= listp->len;
prevp = listp;
listp = listp->next;
}
while ((listp = listp->next) != NULL);
while (listp != NULL);
if (listp == NULL)
{