* elf/dl-load.c (_dl_init_paths): Don't use strdupa in function
[kopensolaris-gnu/glibc.git] / elf / loadtest.c
index 80f9960..863dc53 100644 (file)
@@ -69,18 +69,33 @@ static const struct
 
 #include <include/link.h>
 
+#define OUT \
+  for (map = _r_debug.r_map; map != NULL; map = map->l_next)                 \
+    if (map->l_type == lt_loaded)                                            \
+      printf ("name = \"%s\", opencount = %d\n",                             \
+             map->l_name, (int) map->l_opencount);                           \
+  fflush (stdout)
+
 
 int
-main (void)
+main (int argc, char *argv[])
 {
+  int debug = argc > 1 && argv[1][0] != '\0';
   int count = TEST_ROUNDS;
   int result = 0;
+  struct link_map *map;
 
   mtrace ();
 
   /* Just a seed.  */
   srandom (TEST_ROUNDS);
 
+  if (debug)
+    {
+      puts ("in the beginning");
+      OUT;
+    }
+
   while (count--)
     {
       int nr = random () % NTESTS;
@@ -125,25 +140,41 @@ main (void)
 
          testobjs[index].handle = NULL;
        }
+
+      if (debug)
+       OUT;
     }
 
   /* Unload all loaded modules.  */
-  for (count = 0; count < NOBJS; ++count)
+  for (count = 0; count < (int) NOBJS; ++count)
     if (testobjs[count].handle != NULL)
-{        printf ("\nclose: %s: l_initfini = %p, l_versions = %p\n",
-                 testobjs[count].name,
-                 ((struct link_map*)testobjs[count].handle)->l_initfini,
-                 ((struct link_map*)testobjs[count].handle)->l_versions);
-      if (dlclose (testobjs[count].handle) != 0)
-       {
-         printf ("failed to close %s\n", testobjs[count].name);
-         result = 1;
-}      }
+      {
+       printf ("\nclose: %s: l_initfini = %p, l_versions = %p\n",
+               testobjs[count].name,
+               ((struct link_map*)testobjs[count].handle)->l_initfini,
+               ((struct link_map*)testobjs[count].handle)->l_versions);
+
+       if (dlclose (testobjs[count].handle) != 0)
+         {
+           printf ("failed to close %s\n", testobjs[count].name);
+           result = 1;
+         }
+      }
+
+  /* Check whether all files are unloaded.  */
+  for (map = _r_debug.r_map; map != NULL; map = map->l_next)
+    if (map->l_type == lt_loaded)
+      {
+       printf ("name = \"%s\", opencount = %d\n",
+               map->l_name, (int) map->l_opencount);
+       result = 1;
+      }
 
   return result;
 }
 
 
+extern int foo (int a);
 int
 foo (int a)
 {