]>
Commit | Line | Data |
---|---|---|
2e2b6e26 UD |
1 | #include <dlfcn.h> |
2 | #include <stdio.h> | |
3 | ||
4 | int | |
5 | main (void) | |
6 | { | |
7 | void *g = dlopen ("unload3mod1.so", RTLD_GLOBAL | RTLD_NOW); | |
8 | void *h = dlopen ("unload3mod2.so", RTLD_GLOBAL | RTLD_NOW); | |
9 | if (g == NULL || h == NULL) | |
10 | { | |
11 | printf ("dlopen unload3mod{1,2}.so failed: %p %p\n", g, h); | |
12 | return 1; | |
13 | } | |
14 | dlclose (h); | |
15 | dlclose (g); | |
16 | ||
17 | g = dlopen ("unload3mod3.so", RTLD_GLOBAL | RTLD_NOW); | |
18 | h = dlopen ("unload3mod4.so", RTLD_GLOBAL | RTLD_NOW); | |
19 | if (g == NULL || h == NULL) | |
20 | { | |
21 | printf ("dlopen unload3mod{3,4}.so failed: %p %p\n", g, h); | |
22 | return 1; | |
23 | } | |
24 | ||
25 | int (*fn) (int); | |
26 | fn = dlsym (h, "bar"); | |
27 | if (fn == NULL) | |
28 | { | |
29 | puts ("dlsym failed"); | |
30 | return 1; | |
31 | } | |
32 | ||
33 | int val = fn (16); | |
34 | if (val != 24) | |
35 | { | |
36 | printf ("bar returned %d != 24\n", val); | |
37 | return 1; | |
38 | } | |
39 | ||
40 | return 0; | |
41 | } |