about summary refs log tree commit diff
path: root/elf/dl-deps.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/dl-deps.c')
-rw-r--r--elf/dl-deps.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index ca0d9322ba..7291cde787 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -385,7 +385,11 @@ _dl_map_object_deps (struct link_map *map,
 
   for (nlist = 0, runp = known; runp; runp = runp->unique)
     {
-      map->l_searchlist.r_list[nlist++] = runp->map;
+      if (trace_mode && runp->map->l_opencount == 0)
+	/* This can happen when we trace the loading.  */
+	--map->l_searchlist.r_nlist;
+      else
+	map->l_searchlist.r_list[nlist++] = runp->map;
 
       /* Now clear all the mark bits we set in the objects on the search list
 	 to avoid duplicates, so the next call starts fresh.  */
@@ -406,7 +410,11 @@ _dl_map_object_deps (struct link_map *map,
 			  "cannot allocate symbol search list");
 
       for (cnt = 0, runp = known; runp; runp = runp->dup)
-	map->l_searchlist.r_duplist[cnt++] = runp->map;
+	if (trace_mode && runp->map->l_opencount == 0)
+	  /* This can happen when we trace the loading.  */
+	  --map->l_searchlist.r_nduplist;
+	else
+	  map->l_searchlist.r_duplist[cnt++] = runp->map;
     }
 
   /* Now that all this succeeded put the objects in the global scope if