1: #include <dlfcn.h>
2: #include <stdio.h>
3:
4: extern int found_in_mod1 (void);
5: int
6: found_in_mod1 (void)
7: {
8: return 1;
9: }
10:
11: extern int found_in_mod2 (void);
12: int
13: found_in_mod2 (void)
14: {
15: return 2;
16: }
17:
18:
19: extern int test_in_mod2 (int (*mainp)(int, char **));
20: int
21: test_in_mod2 (int (*mainp)(int, char **))
22: {
23: int (*ifp) (void);
24: void *p;
25: int result = 0;
26:
27:
28: p = dlsym (RTLD_DEFAULT, "main");
29: if (p == NULL)
30: {
31: printf ("%s: main not found\n", __FILE__);
32: result = 1;
33: }
34: else if ((int (*)(int, char **))p != mainp)
35: {
36: printf ("%s: wrong address returned for main\n", __FILE__);
37: result = 1;
38: }
39: else
40: printf ("%s: main correctly found\n", __FILE__);
41:
42: ifp = dlsym (RTLD_DEFAULT, "found_in_mod1");
43: if ((void *) ifp == NULL)
44: {
45: printf ("%s: found_in_mod1 not found\n", __FILE__);
46: result = 1;
47: }
48: else if (ifp () != 1)
49: {
50: printf ("%s: wrong address returned for found_in_mod1\n", __FILE__);
51: result = 1;
52: }
53: else
54: printf ("%s: found_in_mod1 correctly found\n", __FILE__);
55:
56: ifp = dlsym (RTLD_DEFAULT, "found_in_mod2");
57: if ((void *) ifp == NULL)
58: {
59: printf ("%s: found_in_mod2 not found\n", __FILE__);
60: result = 1;
61: }
62: else if (ifp () != 2)
63: {
64: printf ("%s: wrong address returned for found_in_mod2\n", __FILE__);
65: result = 1;
66: }
67: else
68: printf ("%s: found_in_mod2 correctly found\n", __FILE__);
69:
70: return result;
71: }