diff options
-rw-r--r-- | test/dlopen/Makefile | 3 | ||||
-rw-r--r-- | test/dlopen/dladdr.c | 25 |
2 files changed, 27 insertions, 1 deletions
diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index bfe4ec8ba..8f1b8330b 100644 --- a/test/dlopen/Makefile +++ b/test/dlopen/Makefile @@ -4,7 +4,7 @@ # rules need a little love to work with glibc ... export UCLIBC_ONLY := 1 -TESTS := dltest dltest2 test1 test2 test3 +TESTS := dltest dltest2 test1 test2 test3 dladdr ifeq ($(UCLIBC_STATIC),y) TESTS_DISABLED := test3 @@ -21,6 +21,7 @@ LDFLAGS_dltest2 := -ldl -lpthread LDFLAGS_test1 := -ldl LDFLAGS_test2 := -ldl LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,. +LDFLAGS_dladdr := -ldl DEBUG_LIBS := X WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)" diff --git a/test/dlopen/dladdr.c b/test/dlopen/dladdr.c new file mode 100644 index 000000000..b64c000bc --- /dev/null +++ b/test/dlopen/dladdr.c @@ -0,0 +1,25 @@ +#include <dlfcn.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +int main(int argc, char **argv) +{ + Dl_info info; + int res = 0; + + memset(&info, '\0', sizeof(Dl_info)); + res = dladdr((void *)1, &info); + if (res != 0) { + fprintf(stderr, "dladdr() should fail\n"); + fprintf(stderr, "dli_fname = %s\n", info.dli_fname); + fprintf(stderr, "dli_fbase = 0x%08x\n", (unsigned int)info.dli_fbase); + fprintf(stderr, "dli_sname = %s\n", info.dli_sname); + fprintf(stderr, "dli_saddr = 0x%08x\n", (unsigned int)info.dli_saddr); + exit(1); + } + + fprintf(stderr, "dladdr() failed as expected\n"); + return EXIT_SUCCESS; +} + |