about summary refs log tree commit diff
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 963b03b7c1..4dcd263726 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 1435284c62..4640b774cb 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 f109838cb8..d20e6dcbb8 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");
 }