aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--elf/constload1.c9
-rw-r--r--elf/constload2.c22
3 files changed, 33 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 963b03b..4dcd263 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2000-08-15 Ulrich Drepper <drepper@redhat.com>
+ * elf/constload1.c: Call mtrace. Check return value of dlclose call.
+ * elf/constload2.c: Add destructor to unload constload3.
+
* include/link.h: Include sysd-link.h.
* sysdeps/generic/sysd-link.h: New file.
* sysdeps/unix/sysv/linux/sysd-link.h: New file.
diff --git a/elf/constload1.c b/elf/constload1.c
index 1435284..4640b77 100644
--- a/elf/constload1.c
+++ b/elf/constload1.c
@@ -1,6 +1,7 @@
#include <dlfcn.h>
#include <errno.h>
#include <error.h>
+#include <mcheck.h>
#include <stdlib.h>
int
@@ -10,11 +11,17 @@ main (void)
void *h;
int ret;
+ mtrace ();
+
h = dlopen ("constload2.so", RTLD_LAZY | RTLD_GLOBAL);
if (h == NULL)
error (EXIT_FAILURE, errno, "cannot load module \"constload2.so\"");
foo = dlsym (h, "foo");
ret = foo ();
- dlclose (h);
+ if (dlclose (h) != 0)
+ {
+ puts ("failed to close");
+ exit (EXIT_FAILURE);
+ }
return ret;
}
diff --git a/elf/constload2.c b/elf/constload2.c
index f109838..d20e6dc 100644
--- a/elf/constload2.c
+++ b/elf/constload2.c
@@ -1,4 +1,6 @@
#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
extern int bar (void);
@@ -21,4 +23,24 @@ __attribute__ ((__constructor__))
init (void)
{
h = dlopen ("constload3.so", RTLD_GLOBAL | RTLD_LAZY);
+ if (h == NULL)
+ {
+ puts ("failed to load constload3");
+ exit (1);
+ }
+ else
+ puts ("succeeded loading constload3");
+}
+
+static void
+__attribute__ ((__destructor__))
+fini (void)
+{
+ if (dlclose (h) != 0)
+ {
+ puts ("failed to unload constload3");
+ exit (1);
+ }
+ else
+ puts ("succeeded unloading constload3");
}