* sysdeps/generic/libc-tls.c (__libc_setup_tls): Don't check for
authorRoland McGrath <roland@gnu.org>
Wed, 28 Aug 2002 10:28:11 +0000 (10:28 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 28 Aug 2002 10:28:11 +0000 (10:28 +0000)
PT_LOAD program headers and don't try to relocate PT_TLS's p_vaddr;
it is already absolute.

* elf/Makefile (tests): List tst-tls1 and tst-tls2 unconditionally.
[$(build-static) = yes] (tests): Add tst-tls1-static, tst-tls2-static.
[$(build-static) = yes] (tests-static): New variable.
($(tests-static):%=$(objfpx)%.o)): New static pattern rule.

ChangeLog
sysdeps/generic/libc-tls.c

index 246d62f..6bd977e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,19 @@
+2002-08-28  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/generic/libc-tls.c (__libc_setup_tls): Don't check for
+       PT_LOAD program headers and don't try to relocate PT_TLS's p_vaddr;
+       it is already absolute.
+
+       * elf/Makefile (tests): List tst-tls1 and tst-tls2 unconditionally.
+       [$(build-static) = yes] (tests): Add tst-tls1-static, tst-tls2-static.
+       [$(build-static) = yes] (tests-static): New variable.
+       ($(tests-static):%=$(objfpx)%.o)): New static pattern rule.
+
 2002-08-26  Christoph Hellwig  <hch@lst.de>
 
        * sysdeps/unix/sysv/linux/sys/personality.h: Remark origin, fix
        formating braindamage, add missing PER_HPUX and PER_OSF1 values.
 
-
 2002-08-28  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/x86_64/Dist: Add _mcount.S and bits/link.h.
index 71cae95..2bbdf2e 100644 (file)
@@ -59,35 +59,26 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
   void *tlsblock;
   size_t memsz = 0;
   size_t filesz = 0;
-  size_t initimage = 0;
+  void *initimage = NULL;
   size_t align = 0;
   size_t max_align = tcbalign;
-  size_t loadaddr = ~0ul;
   size_t tcb_offset;
   ElfW(Phdr) *phdr;
 
   /* Look through the TLS segment if there is any.  */
   if (_dl_phdr != NULL)
     for (phdr = _dl_phdr; phdr < &_dl_phdr[_dl_phnum]; ++phdr)
-      {
-       if (phdr->p_type == PT_TLS)
-         {
-           /* Remember the values we need.  */
-           memsz = phdr->p_memsz;
-           filesz = phdr->p_filesz;
-           initimage = phdr->p_vaddr;
-           align = phdr->p_align;
-           if (phdr->p_align > max_align)
-             max_align = phdr->p_align;
-         }
-       else if (phdr->p_type == PT_LOAD)
-         {
-           /* We have to find the load address which is not easy.
-              Look for the load segment with the lowest address.  */
-           if (phdr->p_vaddr < loadaddr)
-             loadaddr = phdr->p_vaddr;
-         }
-    }
+      if (phdr->p_type == PT_TLS)
+       {
+         /* Remember the values we need.  */
+         memsz = phdr->p_memsz;
+         filesz = phdr->p_filesz;
+         initimage = (void *) phdr->p_vaddr;
+         align = phdr->p_align;
+         if (phdr->p_align > max_align)
+           max_align = phdr->p_align;
+         break;
+       }
 
   if (memsz == 0 && tcbsize == 0)
     /* We do not need a TLS block and no thread descriptor.  */
@@ -125,8 +116,7 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
 # else
 #  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
 # endif
-  memset (__mempcpy (static_dtv[2].pointer, (char *) loadaddr + initimage,
-                    filesz),
+  memset (__mempcpy (static_dtv[2].pointer, initimage, filesz),
          '\0', memsz - filesz);
 
   /* Install the pointer to the dtv.  */