aboutsummaryrefslogtreecommitdiff
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 60deb77..e423356 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;
}