diff options
Diffstat (limited to 'elf/tst-unique1.c')
-rw-r--r-- | elf/tst-unique1.c | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/elf/tst-unique1.c b/elf/tst-unique1.c index 9b7996c..46d41d9 100644 --- a/elf/tst-unique1.c +++ b/elf/tst-unique1.c @@ -1,6 +1,7 @@ #include <config.h> #include <dlfcn.h> #include <stdio.h> +#include <sys/mman.h> static int do_test (void) @@ -30,10 +31,45 @@ do_test (void) puts ("cannot locate f in tst-unique1mod2"); return 1; } - return f2 (f1 ()); -#else - return 0; + if (f2 (f1 ())) + { + puts ("f from tst-unique1mod2 failed"); + return 1; + } + dlclose (h2); + dlclose (h1); + mmap (NULL, 1024 * 1024 * 16, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY); + if (h2 == NULL) + { + puts ("cannot load tst-unique1mod2"); + return 1; + } + f2 = dlsym (h2, "f"); + if (f2 == NULL) + { + puts ("cannot locate f in tst-unique1mod2"); + return 1; + } + h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY); + if (h1 == NULL) + { + puts ("cannot load tst-unique1mod1"); + return 1; + } + f1 = dlsym (h1, "f"); + if (f1 == NULL) + { + puts ("cannot locate f in tst-unique1mod1"); + return 1; + } + if (f2 (f1 ())) + { + puts ("f from tst-unique1mod2 failed"); + return 1; + } #endif + return 0; } #define TEST_FUNCTION do_test () |