summaryrefslogtreecommitdiff
path: root/elf/dl-open.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-10-22 06:22:53 +0000
committerRoland McGrath <roland@gnu.org>2002-10-22 06:22:53 +0000
commit8265947da0173ae415bed7123c64ad97bb2af1b5 (patch)
tree8ae3555f5b74d1824257f5a0b5d922235cc220ad /elf/dl-open.c
parent6ef518c323c2bcdd8e633da3c0cd1f525f63c7d8 (diff)
* 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.
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r--elf/dl-open.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 08efe6958d..0e74996473 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -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)
{