1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <dlfcn.h>
22: #include <errno.h>
23: #include <error.h>
24: #include <stdio.h>
25: #include <stdlib.h>
26: #include <string.h>
27:
28: #include <ldsodefs.h>
29:
30:
31: #define TEST_FUNCTION do_test ()
32: extern int do_test (void);
33:
34: int
35: do_test (void)
36: {
37: void *handle;
38: int (*sym) (void);
39: Dl_info info;
40: int ret;
41:
42:
43: handle = dlopen ("glreflib1.so", RTLD_NOW);
44: if (handle == NULL)
45: error (EXIT_FAILURE, 0, "cannot load: glreflib1.so");
46:
47: sym = dlsym (handle, "ref1");
48: if (sym == NULL)
49: error (EXIT_FAILURE, 0, "dlsym failed");
50:
51: memset (&info, 0, sizeof (info));
52: ret = dladdr (sym, &info);
53:
54: if (ret == 0)
55: error (EXIT_FAILURE, 0, "dladdr failed");
56:
57: printf ("address of ref1 = %lx\n",
58: (unsigned long int) DL_LOOKUP_ADDRESS (sym));
59: printf ("ret = %d\n", ret);
60: printf ("info.dli_fname = %p (\"%s\")\n", info.dli_fname, info.dli_fname);
61: printf ("info.dli_fbase = %p\n", info.dli_fbase);
62: printf ("info.dli_sname = %p (\"%s\")\n", info.dli_sname, info.dli_sname);
63: printf ("info.dli_saddr = %p\n", info.dli_saddr);
64:
65: if (info.dli_fname == NULL)
66: error (EXIT_FAILURE, 0, "dli_fname is NULL");
67: if (info.dli_fbase == NULL)
68: error (EXIT_FAILURE, 0, "dli_fbase is NULL");
69: if (info.dli_sname == NULL)
70: error (EXIT_FAILURE, 0, "dli_sname is NULL");
71: if (info.dli_saddr == NULL)
72: error (EXIT_FAILURE, 0, "dli_saddr is NULL");
73:
74: dlclose (handle);
75:
76: return 0;
77: }
78:
79:
80: #include "../test-skeleton.c"