xref: /netbsd-src/external/gpl3/gcc.old/dist/libphobos/testsuite/libphobos.shared/linkDR.c (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1*627f7eb2Smrg #include <stdlib.h>
2*627f7eb2Smrg #include <string.h>
3*627f7eb2Smrg #include <dlfcn.h>
4*627f7eb2Smrg #include <assert.h>
5*627f7eb2Smrg 
6*627f7eb2Smrg extern void* rt_loadLibrary(const char*);
7*627f7eb2Smrg extern int rt_unloadLibrary(void*);
8*627f7eb2Smrg extern int rt_init(void);
9*627f7eb2Smrg extern int rt_term(void);
10*627f7eb2Smrg 
main(int argc,char * argv[])11*627f7eb2Smrg int main(int argc, char* argv[])
12*627f7eb2Smrg {
13*627f7eb2Smrg     if (!rt_init()) return EXIT_FAILURE;
14*627f7eb2Smrg     const size_t pathlen = strrchr(argv[0], '/') - argv[0] + 1;
15*627f7eb2Smrg     char *name = malloc(pathlen + sizeof("lib.so"));
16*627f7eb2Smrg     memcpy(name, argv[0], pathlen);
17*627f7eb2Smrg     memcpy(name+pathlen, "lib.so", sizeof("lib.so"));
18*627f7eb2Smrg 
19*627f7eb2Smrg     void *dlib = rt_loadLibrary(name);
20*627f7eb2Smrg     free(name);
21*627f7eb2Smrg     assert(dlib);
22*627f7eb2Smrg 
23*627f7eb2Smrg     int (*runTests)(void) = dlsym(dlib, "runTests");
24*627f7eb2Smrg     assert(runTests());
25*627f7eb2Smrg     assert(rt_unloadLibrary(dlib));
26*627f7eb2Smrg     if (!rt_term()) return EXIT_FAILURE;
27*627f7eb2Smrg     return EXIT_SUCCESS;
28*627f7eb2Smrg }
29