]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2009-04-16 Samuel Thibault <samuel.thibault@ens-lyon.org>
authorRoland McGrath <roland@gnu.org>
Fri, 17 Apr 2009 00:00:08 +0000 (00:00 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 17 Apr 2009 00:00:08 +0000 (00:00 +0000)
* elf/rtld.c (dl_main): Really call _dl_sysdep_start_cleanup after all
calls to _dl_relocate_object.

elf/rtld.c

index 69c27cc4ac4c1bd108a5a729697b30e2f5871e9a..f97de9ac08a2beb6753b13c4618f1397f066f58e 100644 (file)
@@ -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))