diff options
Diffstat (limited to 'elf/dblload.c')
-rw-r--r-- | elf/dblload.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/elf/dblload.c b/elf/dblload.c new file mode 100644 index 0000000000..52389a60ce --- /dev/null +++ b/elf/dblload.c @@ -0,0 +1,53 @@ +#include <dlfcn.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> + + +int +main (void) +{ + void *p1; + void *p2; + int (*fp) (void); + int result; + + mtrace (); + + p1 = dlopen ("dblloadmod1.so", RTLD_LAZY); + if (p1 == NULL) + { + printf ("cannot open dblloadmod1.so: %s\n", dlerror ()); + exit (EXIT_FAILURE); + } + + p2 = dlopen ("dblloadmod2.so", RTLD_LAZY); + if (p1 == NULL) + { + printf ("cannot open dblloadmod2.so: %s\n", dlerror ()); + exit (EXIT_FAILURE); + } + + fp = dlsym (p1, "foo"); + if (fp == NULL) + { + printf ("cannot get function \"foo\": %s\n", dlerror ()); + exit (EXIT_FAILURE); + } + + result = fp (); + + if (dlclose (p1) != 0) + { + printf ("error while closing dblloadmod1.so: %s\n", dlerror ()); + exit (EXIT_FAILURE); + } + + if (dlclose (p2) != 0) + { + printf ("error while closing dblloadmod2.so: %s\n", dlerror ()); + exit (EXIT_FAILURE); + } + + return result; +} |