diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-03-12 19:22:52 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-03-12 19:22:52 +0000 |
commit | 458e37f68e1836e456e1b6a4e383f53476a0c2f1 (patch) | |
tree | 2821cff4bd6be7eb1a3d3ac029d885004fec7b15 /test/dlopen | |
parent | 3c744cd1780793df6193f3b83630702b35ab1e02 (diff) |
make sure dlsym() properly returns NULL with undefined symbols
Diffstat (limited to 'test/dlopen')
-rw-r--r-- | test/dlopen/Makefile | 4 | ||||
-rw-r--r-- | test/dlopen/dlundef.c | 29 | ||||
-rw-r--r-- | test/dlopen/libundef.c | 15 |
3 files changed, 47 insertions, 1 deletions
diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index defe764ed..db989b2a9 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 dlstatic test1 test2 test3 +TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef include ../Test.mak @@ -14,6 +14,7 @@ CFLAGS_dltest2 := -DLIBNAME="\"./libtest3.so\"" LDFLAGS_dlstatic := -ldl LDFLAGS_dltest := -ldl -lpthread LDFLAGS_dltest2 := -ldl -lpthread +LDFLAGS_dlundef := -ldl LDFLAGS_test1 := -ldl LDFLAGS_test2 := -ldl LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,. @@ -24,6 +25,7 @@ WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)" dltest: libtest.so dltest2: libtest3.so dlstatic: libstatic.so +dlundef: libundef.so test1: libtest1.so test2: libtest1.so libtest2.so test3: libtest1.so libtest2.so diff --git a/test/dlopen/dlundef.c b/test/dlopen/dlundef.c new file mode 100644 index 000000000..cefd93318 --- /dev/null +++ b/test/dlopen/dlundef.c @@ -0,0 +1,29 @@ +#include <fcntl.h> +#include <stdlib.h> +#include <stdio.h> +#include <dlfcn.h> +#include <stdint.h> + +#define LIBNAME "libundef.so" + +int main(int argc, char **argv) +{ + void *handle; + int (*myundefined)(void); + + handle = dlopen(LIBNAME, RTLD_LAZY); + if (!handle) { + fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror()); + return EXIT_FAILURE; + } + + myundefined = dlsym(handle, "__booga_booga_you_cant_touch_this__"); + if (myundefined != NULL) { + fprintf(stderr, "dlsym() found a symbol that does not exist!\n"); + return EXIT_FAILURE; + } + + dlclose(handle); + + return EXIT_SUCCESS; +} diff --git a/test/dlopen/libundef.c b/test/dlopen/libundef.c new file mode 100644 index 000000000..bf44c3c68 --- /dev/null +++ b/test/dlopen/libundef.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +static int global_static = -1; + +int static_test(void) +{ + static int local_static = -2; + + if (global_static != -1) + printf("FAIL: global_static is not -1\n"); + if (local_static != -2) + printf("FAIL: local_static is not -2\n"); + + return (global_static == -1 && local_static == -2); +} |