From f6de2239e2cb1af87b36dbd8712bd27f42ae7d54 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 21 Oct 2000 02:07:22 +0000 Subject: 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. --- elf/unload2.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 elf/unload2.c (limited to 'elf/unload2.c') 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 +#include +#include +#include +#include +#include +#include + +#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; +} -- cgit 1.4.1