diff options
Diffstat (limited to 'test/dlopen/dltest.c')
-rw-r--r-- | test/dlopen/dltest.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/dlopen/dltest.c b/test/dlopen/dltest.c new file mode 100644 index 000000000..244f3b76b --- /dev/null +++ b/test/dlopen/dltest.c @@ -0,0 +1,45 @@ +#include <fcntl.h> +#include <stdlib.h> +#include <stdio.h> +#include <dlfcn.h> +#include <stdint.h> + +#ifdef __UCLIBC__ +extern void _dlinfo(void); +#endif + +int main(int argc, char **argv) +{ + int ret = EXIT_SUCCESS; + void *handle; + void (*mydltest)(void *value1, void *value2); + char *error; + uint32_t *value1, *value2; + + handle = dlopen (LIBNAME, RTLD_LAZY); + if (!handle) { + fprintf(stderr, "Could not open ./libtest.so: %s\n", dlerror()); + exit(1); + } + + mydltest = dlsym(handle, "dltest"); + if ((error = dlerror()) != NULL) { + fprintf(stderr, "Could not locate symbol 'dltest': %s\n", error); + exit(1); + } + + mydltest(&value1, &value2); + printf("dltest: __pthread_return_0=%p\n", value1); + printf("dltest: pthread_self=%p\n", value2); + if (value1 == value2) { + ret = EXIT_FAILURE; + printf("dltest: values should NOT be equal Weak values resolved incorrectly!\n"); + } else { + printf("dltest: weak symbols resoved correctly.\n"); + } + + dlclose(handle); + + return ret; +} + |