1 #include <dlfcn.h>
2 #include <stdio.h>
3 #include <gnu/lib-names.h>
4
5 #define TEST_SO "$ORIGIN/tst-dlmopen1mod.so"
6
7 static int
do_test(void)8 do_test (void)
9 {
10 void *h = dlopen (LIBC_SO, RTLD_LAZY|RTLD_NOLOAD);
11 if (h == NULL)
12 {
13 printf ("cannot get handle for %s: %s\n", LIBC_SO, dlerror ());
14 return 1;
15 }
16
17 Lmid_t ns = -10;
18 if (dlinfo (h, RTLD_DI_LMID, &ns) != 0)
19 {
20 printf ("dlinfo for %s in %s failed: %s\n",
21 LIBC_SO, __func__, dlerror ());
22 return 1;
23 }
24
25 if (ns != LM_ID_BASE)
26 {
27 printf ("namespace for %s not LM_ID_BASE\n", LIBC_SO);
28 return 1;
29 }
30
31 if (dlclose (h) != 0)
32 {
33 printf ("dlclose for %s in %s failed: %s\n",
34 LIBC_SO, __func__, dlerror ());
35 return 1;
36 }
37
38 h = dlmopen (LM_ID_NEWLM, TEST_SO, RTLD_LAZY);
39 if (h == NULL)
40 {
41 printf ("cannot get handle for %s: %s\n",
42 "tst-dlmopen1mod.so", dlerror ());
43 return 1;
44 }
45
46 ns = -10;
47 if (dlinfo (h, RTLD_DI_LMID, &ns) != 0)
48 {
49 printf ("dlinfo for %s in %s failed: %s\n",
50 "tst-dlmopen1mod.so", __func__, dlerror ());
51 return 1;
52 }
53
54 if (ns == LM_ID_BASE)
55 {
56 printf ("namespace for %s is LM_ID_BASE\n", TEST_SO);
57 return 1;
58 }
59
60 int (*fct) (Lmid_t) = dlsym (h, "foo");
61 if (fct == NULL)
62 {
63 printf ("could not find %s: %s\n", "foo", dlerror ());
64 return 1;
65 }
66
67 if (fct (ns) != 0)
68 return 1;
69
70 if (dlclose (h) != 0)
71 {
72 printf ("dlclose for %s in %s failed: %s\n",
73 TEST_SO, __func__, dlerror ());
74 return 1;
75 }
76
77 return 0;
78 }
79
80 #include <support/test-driver.c>
81