diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | elf/constload1.c | 9 | ||||
-rw-r--r-- | elf/constload2.c | 22 |
3 files changed, 33 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 963b03b7c1..4dcd263726 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2000-08-15 Ulrich Drepper <drepper@redhat.com> + * elf/constload1.c: Call mtrace. Check return value of dlclose call. + * elf/constload2.c: Add destructor to unload constload3. + * include/link.h: Include sysd-link.h. * sysdeps/generic/sysd-link.h: New file. * sysdeps/unix/sysv/linux/sysd-link.h: New file. diff --git a/elf/constload1.c b/elf/constload1.c index 1435284c62..4640b774cb 100644 --- a/elf/constload1.c +++ b/elf/constload1.c @@ -1,6 +1,7 @@ #include <dlfcn.h> #include <errno.h> #include <error.h> +#include <mcheck.h> #include <stdlib.h> int @@ -10,11 +11,17 @@ main (void) void *h; int ret; + mtrace (); + h = dlopen ("constload2.so", RTLD_LAZY | RTLD_GLOBAL); if (h == NULL) error (EXIT_FAILURE, errno, "cannot load module \"constload2.so\""); foo = dlsym (h, "foo"); ret = foo (); - dlclose (h); + if (dlclose (h) != 0) + { + puts ("failed to close"); + exit (EXIT_FAILURE); + } return ret; } diff --git a/elf/constload2.c b/elf/constload2.c index f109838cb8..d20e6dcbb8 100644 --- a/elf/constload2.c +++ b/elf/constload2.c @@ -1,4 +1,6 @@ #include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> extern int bar (void); @@ -21,4 +23,24 @@ __attribute__ ((__constructor__)) init (void) { h = dlopen ("constload3.so", RTLD_GLOBAL | RTLD_LAZY); + if (h == NULL) + { + puts ("failed to load constload3"); + exit (1); + } + else + puts ("succeeded loading constload3"); +} + +static void +__attribute__ ((__destructor__)) +fini (void) +{ + if (dlclose (h) != 0) + { + puts ("failed to unload constload3"); + exit (1); + } + else + puts ("succeeded unloading constload3"); } |