Also relocate in dependency order when doing symbol dependency testing
authorAndreas Schwab <schwab@redhat.com>
Wed, 14 Sep 2011 10:12:25 +0000 (12:12 +0200)
committerAndreas Schwab <schwab@redhat.com>
Wed, 14 Sep 2011 11:29:24 +0000 (13:29 +0200)
ChangeLog
elf/rtld.c

index c004edf..db9bdbb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-14  Andreas Schwab  <schwab@redhat.com>
+
+       * elf/rtld.c (dl_main): Also relocate in dependency order when
+       doing symbol dependency testing.
+
 2011-09-13  Andreas Schwab  <schwab@linux-m68k.org>
 
        * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela):
index 764140d..324d979 100644 (file)
@@ -2027,24 +2027,21 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
            {
              /* We have to do symbol dependency testing.  */
              struct relocate_args args;
-             struct link_map *l;
+             unsigned int i;
 
              args.reloc_mode = GLRO(dl_lazy) ? RTLD_LAZY : 0;
 
-             l = main_map;
-             while (l->l_next != NULL)
-               l = l->l_next;
-             do
+             i = main_map->l_searchlist.r_nlist;
+             while (i-- > 0)
                {
+                 struct link_map *l = main_map->l_initfini[i];
                  if (l != &GL(dl_rtld_map) && ! l->l_faked)
                    {
                      args.l = l;
                      _dl_receive_error (print_unresolved, relocate_doit,
                                         &args);
                    }
-                 l = l->l_prev;
                }
-             while (l != NULL);
 
              if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
                  && rtld_multiple_ref)