(dl_main): Grok --list flag.
[kopensolaris-gnu/glibc.git] / elf / dl-reloc.c
index a3590ff..7e4f499 100644 (file)
@@ -60,16 +60,17 @@ _dl_relocate_object (struct link_map *l, int lazy)
       = ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
 
 
-    Elf32_Addr resolve (const Elf32_Sym **ref)
+    Elf32_Addr resolve (const Elf32_Sym **ref, Elf32_Addr r_offset)
       {
        return _dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope,
-                                 l->l_name);
+                                 l->l_name, (*ref)->st_value == r_offset);
       }
 
     real_next = l->l_next;
     if (l->l_info[DT_SYMBOLIC])
       {
-       l->l_prev->l_next = real_next;
+       if (l->l_prev)
+         l->l_prev->l_next = real_next;
        l->l_next = _dl_loaded;
        scope = l;
       }
@@ -88,7 +89,8 @@ _dl_relocate_object (struct link_map *l, int lazy)
 
     /* Restore list frobnication done above for DT_SYMBOLIC.  */
     l->l_next = real_next;
-    l->l_prev->l_next = l;
+    if (l->l_prev)
+      l->l_prev->l_next = l;
   }
 
   if (l->l_info[DT_JMPREL] && lazy)