diff options
Diffstat (limited to 'REORG.TODO/elf/restest1.c')
-rw-r--r-- | REORG.TODO/elf/restest1.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/REORG.TODO/elf/restest1.c b/REORG.TODO/elf/restest1.c new file mode 100644 index 0000000000..eb5aeca59e --- /dev/null +++ b/REORG.TODO/elf/restest1.c @@ -0,0 +1,57 @@ +#include <dlfcn.h> +#include <error.h> +#include <mcheck.h> +#include <stdio.h> +#include <stdlib.h> + +int +main (void) +{ + void *h1; + int (*fp1) (int); + void *h2; + int (*fp2) (int); + int res1; + int res2; + + mtrace (); + + h1 = dlopen ("testobj1.so", RTLD_LAZY); + if (h1 == NULL) + error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1.so", + dlerror ()); + + h2 = dlopen ("testobj1_1.so", RTLD_LAZY); + if (h1 == NULL) + error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1_1.so", + dlerror ()); + + fp1 = dlsym (h1, "obj1func1"); + if (fp1 == NULL) + error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s", + "testobj1.so", dlerror ()); + + fp2 = dlsym (h2, "obj1func1"); + if (fp2 == NULL) + error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s", + "testobj1_1.so", dlerror ()); + + res1 = fp1 (10); + res2 = fp2 (10); + printf ("fp1(10) = %d\nfp2(10) = %d\n", res1, res2); + + if (dlclose (h1) != 0) + error (EXIT_FAILURE, 0, "cannot close testobj1.so: %s\n", dlerror ()); + if (dlclose (h2) != 0) + error (EXIT_FAILURE, 0, "cannot close testobj1_1.so: %s\n", dlerror ()); + + return res1 != 42 || res2 != 72; +} + + +extern int foo (int a); +int +foo (int a) +{ + return a + 10; +} |