summary refs log tree commit diff
path: root/elf/loadfail.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/loadfail.c')
-rw-r--r--elf/loadfail.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/elf/loadfail.c b/elf/loadfail.c
index 60deb7737b..e423356348 100644
--- a/elf/loadfail.c
+++ b/elf/loadfail.c
@@ -1,25 +1,36 @@
 #include <dlfcn.h>
 #include <error.h>
+#include <mcheck.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 int
 main (void)
 {
+  void *su[5];
   void *h;
+  int n;
 
-  if (dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj2.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj3.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj4.so", RTLD_GLOBAL | RTLD_NOW) == NULL
-      || dlopen ("testobj5.so", RTLD_GLOBAL | RTLD_NOW) == NULL)
+  mtrace ();
+
+  if ((su[0] = dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[1] = dlopen ("testobj2.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[2] = dlopen ("testobj3.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[3] = dlopen ("testobj4.so", RTLD_GLOBAL | RTLD_NOW)) == NULL
+      || (su[4] = dlopen ("testobj5.so", RTLD_GLOBAL | RTLD_NOW)) == NULL)
     error (EXIT_FAILURE, 0, "failed to load shared object: %s", dlerror ());
 
   h = dlopen ("failobj.so", RTLD_GLOBAL | RTLD_NOW);
 
   printf ("h = %p, %s\n", h, h == NULL ? "ok" : "fail");
 
+  for (n = 0; n < 5; ++n)
+    if (dlclose (su[n]) != 0)
+      {
+	printf ("failed to unload su[%d]: %s\n", n, dlerror ());
+	exit (EXIT_FAILURE);
+      }
+
   return h != NULL;
 }