xref: /openbsd-src/regress/libexec/ld.so/lazy/prog/prog.c (revision 6822f9c8033774f6aab00bcb43e8718e7034e67d)
1*6822f9c8Santon /*	$OpenBSD: prog.c,v 1.4 2024/08/23 12:56:26 anton Exp $ */
220dfae25Smatthieu /* Public Domain, 2008, Matthieu Herrb */
320dfae25Smatthieu 
420dfae25Smatthieu #include <dlfcn.h>
520dfae25Smatthieu #include <stdio.h>
6cd85c586Sjsg #include <stdlib.h>
79ae1fb7fSjsg #include <err.h>
820dfae25Smatthieu 
920dfae25Smatthieu void *handle = NULL;
1020dfae25Smatthieu 
1120dfae25Smatthieu typedef int (*foofunc)(void);
1220dfae25Smatthieu 
1320dfae25Smatthieu int
1420dfae25Smatthieu main(int argc, char *argv[])
1520dfae25Smatthieu {
1620dfae25Smatthieu 	foofunc foo;
1720dfae25Smatthieu 	int i;
1820dfae25Smatthieu 
1920dfae25Smatthieu 	printf("loading: %s\n", FOO);
2020dfae25Smatthieu 	handle = dlopen(FOO, RTLD_LAZY|RTLD_GLOBAL);
2120dfae25Smatthieu 	if (handle == NULL) {
22*6822f9c8Santon 		errx(1, "dlopen: %s: %s", FOO, dlerror());
2320dfae25Smatthieu 	}
2420dfae25Smatthieu 	printf("loaded: %s\n", FOO);
2520dfae25Smatthieu 	printf("looking up foo\n");
2620dfae25Smatthieu 	foo = (foofunc)dlsym(handle, "foo");
2720dfae25Smatthieu 	printf("found %p - calling it\n", foo);
2820dfae25Smatthieu 	i = foo();
2920dfae25Smatthieu 	printf("done.\n");
3020dfae25Smatthieu 	exit(i);
3120dfae25Smatthieu }
32