This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.19-395-g3d8c8bf


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  3d8c8bff798a15b6dc0ee94d24fc877db9706589 (commit)
      from  73ba67cbc3941c3bcfda31a22a9d0d97ac928f3b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3d8c8bff798a15b6dc0ee94d24fc877db9706589

commit 3d8c8bff798a15b6dc0ee94d24fc877db9706589
Author: Andreas Schwab <schwab@suse.de>
Date:   Tue Mar 25 11:55:52 2014 +0100

    Remove last use of USE___THREAD

diff --git a/ChangeLog b/ChangeLog
index 7d9a8b7..26720a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2014-05-14  Andreas Schwab  <schwab@suse.de>
 
+	* elf/rtld.c (_dl_start_final, _dl_start, init_tls, dl_main):
+	Remove code conditionalized on USE___THREAD.
+
 	* config.h.in (HAVE_PT_CHOWN): Define as 0.
 	* sysdeps/unix/grantpt.c (grantpt): Check HAVE_PT_CHOWN for value,
 	not definedness.
diff --git a/elf/rtld.c b/elf/rtld.c
index 9d121dc..87c5ffa 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -300,21 +300,9 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
   GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext;
   /* Copy the TLS related data if necessary.  */
 #ifndef DONT_USE_BOOTSTRAP_MAP
-# if USE___THREAD
-  assert (info->l.l_tls_modid != 0);
-  GL(dl_rtld_map).l_tls_blocksize = info->l.l_tls_blocksize;
-  GL(dl_rtld_map).l_tls_align = info->l.l_tls_align;
-  GL(dl_rtld_map).l_tls_firstbyte_offset = info->l.l_tls_firstbyte_offset;
-  GL(dl_rtld_map).l_tls_initimage_size = info->l.l_tls_initimage_size;
-  GL(dl_rtld_map).l_tls_initimage = info->l.l_tls_initimage;
-  GL(dl_rtld_map).l_tls_offset = info->l.l_tls_offset;
-  GL(dl_rtld_map).l_tls_modid = 1;
-# else
-#  if NO_TLS_OFFSET != 0
+# if NO_TLS_OFFSET != 0
   GL(dl_rtld_map).l_tls_offset = NO_TLS_OFFSET;
-#  endif
 # endif
-
 #endif
 
 #if HP_TIMING_AVAIL
@@ -396,9 +384,6 @@ _dl_start (void *arg)
        ++cnt)
     bootstrap_map.l_info[cnt] = 0;
 # endif
-# if USE___THREAD
-  bootstrap_map.l_tls_modid = 0;
-# endif
 #endif
 
   /* Figure out the run-time load address of the dynamic linker itself.  */
@@ -412,123 +397,6 @@ _dl_start (void *arg)
   bootstrap_map.l_tls_offset = NO_TLS_OFFSET;
 #endif
 
-  /* Get the dynamic linker's own program header.  First we need the ELF
-     file header.  The `_begin' symbol created by the linker script points
-     to it.  When we have something like GOTOFF relocs, we can use a plain
-     reference to find the runtime address.  Without that, we have to rely
-     on the `l_addr' value, which is not the value we want when prelinked.  */
-#if USE___THREAD
-  dtv_t initdtv[3];
-  ElfW(Ehdr) *ehdr
-# ifdef DONT_USE_BOOTSTRAP_MAP
-    = (ElfW(Ehdr) *) &_begin;
-# else
-#  error This will not work with prelink.
-    = (ElfW(Ehdr) *) bootstrap_map.l_addr;
-# endif
-  ElfW(Phdr) *phdr = (ElfW(Phdr) *) ((void *) ehdr + ehdr->e_phoff);
-  size_t cnt = ehdr->e_phnum;	/* PT_TLS is usually the last phdr.  */
-  while (cnt-- > 0)
-    if (phdr[cnt].p_type == PT_TLS)
-      {
-	void *tlsblock;
-	size_t max_align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align);
-	char *p;
-
-	bootstrap_map.l_tls_blocksize = phdr[cnt].p_memsz;
-	bootstrap_map.l_tls_align = phdr[cnt].p_align;
-	if (phdr[cnt].p_align == 0)
-	  bootstrap_map.l_tls_firstbyte_offset = 0;
-	else
-	  bootstrap_map.l_tls_firstbyte_offset = (phdr[cnt].p_vaddr
-						  & (phdr[cnt].p_align - 1));
-	assert (bootstrap_map.l_tls_blocksize != 0);
-	bootstrap_map.l_tls_initimage_size = phdr[cnt].p_filesz;
-	bootstrap_map.l_tls_initimage = (void *) (bootstrap_map.l_addr
-						  + phdr[cnt].p_vaddr);
-
-	/* We can now allocate the initial TLS block.  This can happen
-	   on the stack.  We'll get the final memory later when we
-	   know all about the various objects loaded at startup
-	   time.  */
-# if TLS_TCB_AT_TP
-	tlsblock = alloca (roundup (bootstrap_map.l_tls_blocksize,
-				    TLS_INIT_TCB_ALIGN)
-			   + TLS_INIT_TCB_SIZE
-			   + max_align);
-# elif TLS_DTV_AT_TP
-	tlsblock = alloca (roundup (TLS_INIT_TCB_SIZE,
-				    bootstrap_map.l_tls_align)
-			   + bootstrap_map.l_tls_blocksize
-			   + max_align);
-# else
-	/* In case a model with a different layout for the TCB and DTV
-	   is defined add another #elif here and in the following #ifs.  */
-#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-# endif
-	/* Align the TLS block.  */
-	tlsblock = (void *) (((uintptr_t) tlsblock + max_align - 1)
-			     & ~(max_align - 1));
-
-	/* Initialize the dtv.  [0] is the length, [1] the generation
-	   counter.  */
-	initdtv[0].counter = 1;
-	initdtv[1].counter = 0;
-
-	/* Initialize the TLS block.  */
-# if TLS_TCB_AT_TP
-	initdtv[2].pointer = tlsblock;
-# elif TLS_DTV_AT_TP
-	bootstrap_map.l_tls_offset = roundup (TLS_INIT_TCB_SIZE,
-					      bootstrap_map.l_tls_align);
-	initdtv[2].pointer = (char *) tlsblock + bootstrap_map.l_tls_offset;
-# else
-#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-# endif
-	p = __mempcpy (initdtv[2].pointer, bootstrap_map.l_tls_initimage,
-		       bootstrap_map.l_tls_initimage_size);
-# ifdef HAVE_BUILTIN_MEMSET
-	__builtin_memset (p, '\0', (bootstrap_map.l_tls_blocksize
-				    - bootstrap_map.l_tls_initimage_size));
-# else
-	{
-	  size_t remaining = (bootstrap_map.l_tls_blocksize
-			      - bootstrap_map.l_tls_initimage_size);
-	  while (remaining-- > 0)
-	    *p++ = '\0';
-	}
-# endif
-
-	/* Install the pointer to the dtv.  */
-
-	/* Initialize the thread pointer.  */
-# if TLS_TCB_AT_TP
-	bootstrap_map.l_tls_offset
-	  = roundup (bootstrap_map.l_tls_blocksize, TLS_INIT_TCB_ALIGN);
-
-	INSTALL_DTV ((char *) tlsblock + bootstrap_map.l_tls_offset,
-		     initdtv);
-
-	const char *lossage = TLS_INIT_TP ((char *) tlsblock
-					   + bootstrap_map.l_tls_offset, 0);
-# elif TLS_DTV_AT_TP
-	INSTALL_DTV (tlsblock, initdtv);
-	const char *lossage = TLS_INIT_TP (tlsblock, 0);
-# else
-#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-# endif
-	if (__glibc_unlikely (lossage != NULL))
-	  _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
-			    lossage);
-
-	/* So far this is module number one.  */
-	bootstrap_map.l_tls_modid = 1;
-
-	/* There can only be one PT_TLS entry.  */
-	break;
-      }
-#endif	/* USE___THREAD */
-
 #ifdef ELF_MACHINE_BEFORE_RTLD_RELOC
   ELF_MACHINE_BEFORE_RTLD_RELOC (bootstrap_map.l_info);
 #endif
@@ -772,14 +640,8 @@ cannot allocate TLS data structures for initial thread");
      so it knows not to pass this dtv to the normal realloc.  */
   GL(dl_initial_dtv) = GET_DTV (tcbp);
 
-  /* And finally install it for the main thread.  If ld.so itself uses
-     TLS we know the thread pointer was initialized earlier.  */
-  const char *lossage
-#ifdef USE___THREAD
-    = TLS_INIT_TP (tcbp, USE___THREAD);
-#else
-    = TLS_INIT_TP (tcbp, 0);
-#endif
+  /* And finally install it for the main thread.  */
+  const char *lossage = TLS_INIT_TP (tcbp, 0);
   if (__glibc_unlikely (lossage != NULL))
     _dl_fatal_printf ("cannot set up thread-local storage: %s\n", lossage);
   tls_init_tp_called = true;
@@ -2249,16 +2111,10 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
      into the main thread's TLS area, which we allocated above.  */
   _dl_allocate_tls_init (tcbp);
 
-  /* And finally install it for the main thread.  If ld.so itself uses
-     TLS we know the thread pointer was initialized earlier.  */
+  /* And finally install it for the main thread.  */
   if (! tls_init_tp_called)
     {
-      const char *lossage
-#ifdef USE___THREAD
-	= TLS_INIT_TP (tcbp, USE___THREAD);
-#else
-	= TLS_INIT_TP (tcbp, 0);
-#endif
+      const char *lossage = TLS_INIT_TP (tcbp, 0);
       if (__glibc_unlikely (lossage != NULL))
 	_dl_fatal_printf ("cannot set up thread-local storage: %s\n",
 			  lossage);

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog  |    3 +
 elf/rtld.c |  154 ++----------------------------------------------------------
 2 files changed, 8 insertions(+), 149 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]