aboutsummaryrefslogtreecommitdiff
path: root/elf/unload2.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-10-21 02:07:22 +0000
committerUlrich Drepper <drepper@redhat.com>2000-10-21 02:07:22 +0000
commitf6de2239e2cb1af87b36dbd8712bd27f42ae7d54 (patch)
tree7e0a5ad8333b9f73756ee4af90e1dcd30fd430f0 /elf/unload2.c
parente6d18111ad070915de6dca807b1defe11a23ed56 (diff)
downloadglibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.tar
glibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.tar.gz
glibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.tar.bz2
glibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.zip
Update.
* elf/Makefile: Add rules to build and run unload2. * elf/unload2.c: New file. * elf/unload2mod.c: New file. * elf/unload2dep.c: New file. * intl/libintl.h (ngettext macro): Add missing parameter. (dngettext macro): Likewise.
Diffstat (limited to 'elf/unload2.c')
-rw-r--r--elf/unload2.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/elf/unload2.c b/elf/unload2.c
new file mode 100644
index 0000000000..b544e794c8
--- /dev/null
+++ b/elf/unload2.c
@@ -0,0 +1,56 @@
+#include <dlfcn.h>
+#include <elf.h>
+#include <errno.h>
+#include <error.h>
+#include <link.h>
+#include <stdio.h>
+#include <stdlib.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)
+
+int
+main (void)
+{
+ void *h[3];
+ struct link_map *map;
+ void (*fp) (void);
+
+ h[0] = dlopen ("unload2mod.so", RTLD_LAZY);
+ h[1] = dlopen ("unload2mod.so", RTLD_LAZY);
+ if (h[0] == NULL || h[1] == NULL)
+ error (EXIT_FAILURE, errno, "cannot load \"unload2mod.so\"");
+ h[2] = dlopen ("unload2dep.so", RTLD_LAZY);
+ if (h[2] == NULL)
+ error (EXIT_FAILURE, errno, "cannot load \"unload2dep.so\"");
+
+ puts ("\nAfter loading everything:");
+ OUT;
+
+ dlclose (h[0]);
+
+ puts ("\nAfter unloading \"unload2mod.so\" once:");
+ OUT;
+
+ dlclose (h[1]);
+
+ puts ("\nAfter unloading \"unload2mod.so\" twice:");
+ OUT;
+
+ fp = dlsym (h[2], "foo");
+ puts ("\nnow calling `foo'");
+ fflush (stdout);
+ fp ();
+ puts ("managed to call `foo'");
+ fflush (stdout);
+
+ dlclose (h[2]);
+
+ puts ("\nAfter unloading \"unload2dep.so\":");
+ OUT;
+
+ return 0;
+}