* sysdeps/generic/dl-tls.c (__tls_get_addr): After freeing block in
authorRoland McGrath <roland@gnu.org>
Fri, 11 Oct 2002 09:18:04 +0000 (09:18 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 11 Oct 2002 09:18:04 +0000 (09:18 +0000)
now-unused dtv slot, reset the slot to TLS_DTV_UNALLOCATED.

* elf/tls-macros.h [__x86_64__] (TLS_GD): Fix the sequence with the
proper set of no-op insn prefixes.

* elf/tst-tls8.c (do_test): Use %zd format for l_tls_modid members.

ChangeLog
elf/tst-tls8.c
sysdeps/generic/dl-tls.c

index 082b332..f9d0630 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-10-11  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/generic/dl-tls.c (__tls_get_addr): After freeing block in
+       now-unused dtv slot, reset the slot to TLS_DTV_UNALLOCATED.
+
+       * elf/tls-macros.h [__x86_64__] (TLS_GD): Fix the sequence with the
+       proper set of no-op insn prefixes.
+
+       * elf/tst-tls8.c (do_test): Use %zd format for l_tls_modid members.
+
 2002-10-11  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/generic/pselect.c: Avoid unnecessary sigprocmask calls.
index 971ee56..e300bc5 100644 (file)
@@ -39,7 +39,7 @@ do_test (void)
        modid1 = ((struct link_map *) h1)->l_tls_modid;
       else if (((struct link_map *) h1)->l_tls_modid != modid1)
        {
-         printf ("round %d: modid now %d, initially %d\n",
+         printf ("round %d: modid now %zd, initially %d\n",
                  i, ((struct link_map *) h1)->l_tls_modid, modid1);
          result = 1;
        }
@@ -69,7 +69,7 @@ do_test (void)
        modid2 = ((struct link_map *) h1)->l_tls_modid;
       else if (((struct link_map *) h1)->l_tls_modid != modid2)
        {
-         printf ("round %d: modid now %d, initially %d\n",
+         printf ("round %d: modid now %zd, initially %d\n",
                  i, ((struct link_map *) h1)->l_tls_modid, modid2);
          result = 1;
        }
@@ -108,7 +108,7 @@ do_test (void)
         time.  The value of the first round is used.  */
       if (((struct link_map *) h1)->l_tls_modid != modid1)
        {
-         printf ("round %d: modid now %d, initially %d\n",
+         printf ("round %d: modid now %zd, initially %d\n",
                  i, ((struct link_map *) h1)->l_tls_modid, modid1);
          result = 1;
        }
@@ -136,7 +136,7 @@ do_test (void)
         time.  The value of the first round is used.  */
       if (((struct link_map *) h1)->l_tls_modid != modid2)
        {
-         printf ("round %d: modid now %d, initially %d\n",
+         printf ("round %d: modid now %zd, initially %d\n",
                  i, ((struct link_map *) h1)->l_tls_modid, modid2);
          result = 1;
        }
index fe8f791..a642865 100644 (file)
@@ -500,7 +500,10 @@ __tls_get_addr (GET_ADDR_ARGS)
                      /* If this modid was used at some point the memory
                         might still be allocated.  */
                      if (dtv[total + cnt].pointer != TLS_DTV_UNALLOCATED)
-                       free (dtv[total + cnt].pointer);
+                       {
+                         free (dtv[total + cnt].pointer);
+                         dtv[total + cnt].pointer = TLS_DTV_UNALLOCATED;
+                       }
 
                      continue;
                    }