From 9807e5408bf1d7f879216f0000c1f220beb89d93 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 23 Oct 2000 22:58:40 +0000 Subject: Update. * elf/unload.c: Generate more debugging output. * elf/neededtest.c: Make it more complicated. * elf/neededtest2.c: New file. * elf/Makefile: Add rules to build and run neededtest2. --- elf/unload.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'elf/unload.c') diff --git a/elf/unload.c b/elf/unload.c index 2789abd5bb..4fd82b7e3a 100644 --- a/elf/unload.c +++ b/elf/unload.c @@ -4,10 +4,18 @@ require it for glibc. */ #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); \ + fflush (stdout) + typedef struct { void *next; @@ -20,46 +28,62 @@ main (void) strct *testdat; int ret; int result = 0; + struct link_map *map; mtrace (); + puts ("\nBefore"); + OUT; + sohandle = dlopen ("unloadmod.so", RTLD_NOW | RTLD_GLOBAL); if (sohandle == NULL) { - printf ("first dlopen failed: %s\n", dlerror ()); + printf ("*** first dlopen failed: %s\n", dlerror ()); exit (1); } + puts ("\nAfter loading unloadmod.so"); + OUT; + testdat = dlsym (sohandle, "testdat"); testdat->next = (void *) -1; ret = dlclose (sohandle); if (ret != 0) { - puts ("first dlclose failed"); + puts ("*** first dlclose failed"); result = 1; } + puts ("\nAfter closing unloadmod.so"); + OUT; + sohandle = dlopen ("unloadmod.so", RTLD_NOW | RTLD_GLOBAL); if (sohandle == NULL) { - printf ("second dlopen failed: %s\n", dlerror ()); + printf ("*** second dlopen failed: %s\n", dlerror ()); exit (1); } + puts ("\nAfter loading unloadmod.so the second time"); + OUT; + testdat = dlsym (sohandle, "testdat"); if (testdat->next == (void *) -1) { - puts ("testdat->next == (void *) -1"); + puts ("*** testdat->next == (void *) -1"); result = 1; } ret = dlclose (sohandle); if (ret != 0) { - puts ("second dlclose failed"); + puts ("*** second dlclose failed"); result = 1; } + puts ("\nAfter closing unloadmod.so again"); + OUT; + return result; } -- cgit v1.2.3