initial commit
[glibc.git] / elf / lateglobal.c
1 #include <dlfcn.h>
2 #include <mcheck.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5
6 int
7 main (void)
8 {
9 void *h[2];
10 int fail;
11 int (*fp) (void);
12
13 mtrace ();
14
15 h[0] = dlopen ("ltglobmod1.so", RTLD_LAZY);
16 if (h[0] == NULL)
17 {
18 printf ("%s: cannot open %s: %s\n",
19 __FUNCTION__, "ltglobmod1.so", dlerror ());
20 exit (EXIT_FAILURE);
21 }
22 h[1] = dlopen ("ltglobmod2.so", RTLD_LAZY);
23 if (h[1] == NULL)
24 {
25 printf ("%s: cannot open %s: %s\n",
26 __FUNCTION__, "ltglobmod2.so", dlerror ());
27 exit (EXIT_FAILURE);
28 }
29
30 puts ("loaded \"ltglobmod1.so\" without RTLD_GLOBAL");
31
32 fp = dlsym (h[1], "foo");
33 if (fp == NULL)
34 {
35 printf ("cannot get address of `foo': %s\n", dlerror ());
36 exit (EXIT_FAILURE);
37 }
38
39 fail = fp ();
40
41 puts ("back in main");
42
43 dlclose (h[1]);
44 dlclose (h[0]);
45
46 return fail;
47 }