(find_needed): Look for needed objects also in the dependency list of
authordrepper <drepper>
Sun, 6 Jul 1997 21:37:33 +0000 (21:37 +0000)
committerdrepper <drepper>
Sun, 6 Jul 1997 21:37:33 +0000 (21:37 +0000)
the current object.  Added new parameter to find its link map, caller
changed.

elf/dl-version.c

index d06fd5c..0675b1c 100644 (file)
@@ -53,7 +53,7 @@ extern char **_dl_argv;
 
 
 static inline struct link_map *
-find_needed (const char *name)
+find_needed (const char *name, struct link_map *map)
 {
   unsigned int n;
 
@@ -61,6 +61,12 @@ find_needed (const char *name)
     if (_dl_name_match_p (name, _dl_loaded->l_searchlist[n]))
       return _dl_loaded->l_searchlist[n];
 
+  /* The required object is not in the global scope, look to see if it is
+     a dependency of the current object.  */
+  for (n = 0; n < map->l_nsearchlist; n++)
+    if (_dl_name_match_p (name, map->l_searchlist[n]))
+      return map->l_searchlist[n];
+
   /* Should never happen.  */
   return NULL;
 }
@@ -182,7 +188,7 @@ _dl_check_map_versions (struct link_map *map, int verbose)
       while (1)
        {
          ElfW(Vernaux) *aux;
-         struct link_map *needed = find_needed (strtab + ent->vn_file);
+         struct link_map *needed = find_needed (strtab + ent->vn_file, map);
 
          /* If NEEDED is NULL this means a dependency was not found
             and no stub entry was created.  This should never happen.  */