about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2009-04-17 00:00:08 +0000
committerRoland McGrath <roland@gnu.org>2009-04-17 00:00:08 +0000
commitbf8523c867afa489adf97541c6cd7b0df3e1925d (patch)
tree70a3cb9877b571eb4816d33dd3f51efd396e9e62
parentdf77455c4bae4518a76f2029bec5295e08c9e50b (diff)
downloadglibc-bf8523c867afa489adf97541c6cd7b0df3e1925d.tar.gz
glibc-bf8523c867afa489adf97541c6cd7b0df3e1925d.tar.xz
glibc-bf8523c867afa489adf97541c6cd7b0df3e1925d.zip
2009-04-16 Samuel Thibault <samuel.thibault@ens-lyon.org>
	* elf/rtld.c (dl_main): Really call _dl_sysdep_start_cleanup after all
	calls to _dl_relocate_object.
-rw-r--r--elf/rtld.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 69c27cc4ac..f97de9ac08 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -2181,8 +2181,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 	  if (l->l_tls_blocksize != 0 && tls_init_tp_called)
 	    _dl_add_to_slotinfo (l);
 	}
-
-      _dl_sysdep_start_cleanup ();
     }
   else
     {
@@ -2237,13 +2235,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 
       HP_TIMING_DIFF (relocate_time, start, stop);
 
-      /* Do any necessary cleanups for the startup OS interface code.
-	 We do these now so that no calls are made after rtld re-relocation
-	 which might be resolved to different functions than we expect.
-	 We cannot do this before relocating the other objects because
-	 _dl_relocate_object might need to call `mprotect' for DT_TEXTREL.  */
-      _dl_sysdep_start_cleanup ();
-
       /* Now enable profiling if needed.  Like the previous call,
 	 this has to go here because the calls it makes should use the
 	 rtld versions of the functions (particularly calloc()), but it
@@ -2299,6 +2290,13 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
       HP_TIMING_ACCUM_NT (relocate_time, add);
     }
 
+  /* Do any necessary cleanups for the startup OS interface code.
+     We do these now so that no calls are made after rtld re-relocation
+     which might be resolved to different functions than we expect.
+     We cannot do this before relocating the other objects because
+     _dl_relocate_object might need to call `mprotect' for DT_TEXTREL.  */
+  _dl_sysdep_start_cleanup ();
+
 #ifdef SHARED
   /* Auditing checkpoint: we have added all objects.  */
   if (__builtin_expect (GLRO(dl_naudit) > 0, 0))