4dc232f
diff -rup a/elf/dl-deps.c b/elf/dl-deps.c
4dc232f
--- a/elf/dl-deps.c	2012-01-23 14:28:15.888185967 -0700
4dc232f
+++ b/elf/dl-deps.c	2012-01-23 14:29:11.620197431 -0700
4dc232f
@@ -634,7 +634,7 @@ Filters not supported with LD_TRACE_PREL
4dc232f
       /* We can skip looking for the binary itself which is at the front
4dc232f
 	 of the search list.  */
4dc232f
       i = 1;
4dc232f
-      char seen[nlist];
68357f8
+      uint16_t seen[nlist];
4dc232f
       memset (seen, 0, nlist * sizeof (seen[0]));
4dc232f
       while (1)
4dc232f
 	{
4dc232f
@@ -660,13 +660,13 @@ Filters not supported with LD_TRACE_PREL
4dc232f
 			       (k - i) * sizeof (l_initfini[0]));
4dc232f
 		      l_initfini[k] = thisp;
4dc232f
 
4dc232f
-		      if (seen[i + 1] > 1)
4dc232f
+		      if (seen[i + 1] > nlist - i)
4dc232f
 			{
4dc232f
 			  ++i;
4dc232f
 			  goto next_clear;
4dc232f
 			}
4dc232f
 
4dc232f
-		      char this_seen = seen[i];
68357f8
+		      uint16_t this_seen = seen[i];
4dc232f
 		      memmove (&seen[i], &seen[i + 1],
4dc232f
 			       (k - i) * sizeof (seen[0]));
4dc232f
 		      seen[k] = this_seen;
4dc232f
diff -rup a/elf/dl-fini.c b/elf/dl-fini.c
4dc232f
--- a/elf/dl-fini.c	2012-01-01 05:16:32.000000000 -0700
4dc232f
+++ b/elf/dl-fini.c	2012-01-23 14:29:39.661203226 -0700
4dc232f
@@ -39,7 +39,7 @@ _dl_sort_fini (struct link_map **maps, s
4dc232f
   /* We can skip looking for the binary itself which is at the front
4dc232f
      of the search list for the main namespace.  */
4dc232f
   unsigned int i = ns == LM_ID_BASE;
4dc232f
-  char seen[nmaps];
68357f8
+  uint16_t seen[nmaps];
4dc232f
   memset (seen, 0, nmaps * sizeof (seen[0]));
4dc232f
   while (1)
4dc232f
     {
4dc232f
@@ -79,13 +79,13 @@ _dl_sort_fini (struct link_map **maps, s
4dc232f
 		      used[k] = here_used;
4dc232f
 		    }
4dc232f
 
4dc232f
-		  if (seen[i + 1] > 1)
4dc232f
+		  if (seen[i + 1] > nmaps - i)
4dc232f
 		    {
4dc232f
 		      ++i;
4dc232f
 		      goto next_clear;
4dc232f
 		    }
4dc232f
 
4dc232f
-		  char this_seen = seen[i];
68357f8
+		  uint16_t this_seen = seen[i];
4dc232f
 		  memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0]));
4dc232f
 		  seen[k] = this_seen;
4dc232f