diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-10-21 02:07:22 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-10-21 02:07:22 +0000 |
commit | f6de2239e2cb1af87b36dbd8712bd27f42ae7d54 (patch) | |
tree | 7e0a5ad8333b9f73756ee4af90e1dcd30fd430f0 /elf/unload2.c | |
parent | e6d18111ad070915de6dca807b1defe11a23ed56 (diff) | |
download | glibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.tar.gz glibc-f6de2239e2cb1af87b36dbd8712bd27f42ae7d54.tar.xz 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.c | 56 |
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; +} |