projects
/
kopensolaris-gnu
/
glibc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3979a53
)
Generate more debugging output.
author
drepper
<drepper>
Mon, 23 Oct 2000 22:56:50 +0000
(22:56 +0000)
committer
drepper
<drepper>
Mon, 23 Oct 2000 22:56:50 +0000
(22:56 +0000)
elf/unload.c
patch
|
blob
|
history
diff --git
a/elf/unload.c
b/elf/unload.c
index
2789abd
..
4fd82b7
100644
(file)
--- a/
elf/unload.c
+++ b/
elf/unload.c
@@
-4,10
+4,18
@@
require it for glibc. */
#include <dlfcn.h>
require it for glibc. */
#include <dlfcn.h>
+#include <link.h>
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
#include <mcheck.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); \
+ fflush (stdout)
+
typedef struct
{
void *next;
typedef struct
{
void *next;
@@
-20,46
+28,62
@@
main (void)
strct *testdat;
int ret;
int result = 0;
strct *testdat;
int ret;
int result = 0;
+ struct link_map *map;
mtrace ();
mtrace ();
+ puts ("\nBefore");
+ OUT;
+
sohandle = dlopen ("unloadmod.so", RTLD_NOW | RTLD_GLOBAL);
if (sohandle == NULL)
{
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);
}
exit (1);
}
+ puts ("\nAfter loading unloadmod.so");
+ OUT;
+
testdat = dlsym (sohandle, "testdat");
testdat->next = (void *) -1;
ret = dlclose (sohandle);
if (ret != 0)
{
testdat = dlsym (sohandle, "testdat");
testdat->next = (void *) -1;
ret = dlclose (sohandle);
if (ret != 0)
{
- puts ("first dlclose failed");
+ puts ("
***
first dlclose failed");
result = 1;
}
result = 1;
}
+ puts ("\nAfter closing unloadmod.so");
+ OUT;
+
sohandle = dlopen ("unloadmod.so", RTLD_NOW | RTLD_GLOBAL);
if (sohandle == NULL)
{
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);
}
exit (1);
}
+ puts ("\nAfter loading unloadmod.so the second time");
+ OUT;
+
testdat = dlsym (sohandle, "testdat");
if (testdat->next == (void *) -1)
{
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)
{
result = 1;
}
ret = dlclose (sohandle);
if (ret != 0)
{
- puts ("second dlclose failed");
+ puts ("
***
second dlclose failed");
result = 1;
}
result = 1;
}
+ puts ("\nAfter closing unloadmod.so again");
+ OUT;
+
return result;
}
return result;
}