diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-03-12 19:44:58 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-03-12 19:44:58 +0000 |
commit | 55b69ac7beb83b7c02a1d68fd84577cb3492772a (patch) | |
tree | 97f3cceb3bbde09f5be3369ff40a03deca1726d6 | |
parent | 458e37f68e1836e456e1b6a4e383f53476a0c2f1 (diff) |
make sure undefine references in dlopen()-ed libs are handled graciously
-rw-r--r-- | test/dlopen/Makefile | 6 | ||||
-rw-r--r-- | test/dlopen/dlafk.c | 36 | ||||
-rw-r--r-- | test/dlopen/libafk-temp.c | 1 | ||||
-rw-r--r-- | test/dlopen/libafk.c | 1 | ||||
-rw-r--r-- | test/dlopen/libundef.c | 16 |
5 files changed, 44 insertions, 16 deletions
diff --git a/test/dlopen/Makefile b/test/dlopen/Makefile index db989b2a9..7d57db067 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 dlundef +TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef dlafk include ../Test.mak @@ -15,6 +15,7 @@ LDFLAGS_dlstatic := -ldl LDFLAGS_dltest := -ldl -lpthread LDFLAGS_dltest2 := -ldl -lpthread LDFLAGS_dlundef := -ldl +LDFLAGS_dlafk := -ldl ./libafk.so -Wl,-rpath,. LDFLAGS_test1 := -ldl LDFLAGS_test2 := -ldl LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,. @@ -26,6 +27,9 @@ dltest: libtest.so dltest2: libtest3.so dlstatic: libstatic.so dlundef: libundef.so +dlafk: libafk.so +libafk.so: libafk-temp.so +LDFLAGS_libafk.so := ./libafk-temp.so -Wl,-rpath,. test1: libtest1.so test2: libtest1.so libtest2.so test3: libtest1.so libtest2.so diff --git a/test/dlopen/dlafk.c b/test/dlopen/dlafk.c new file mode 100644 index 000000000..2eac4afb2 --- /dev/null +++ b/test/dlopen/dlafk.c @@ -0,0 +1,36 @@ +#include <fcntl.h> +#include <stdlib.h> +#include <stdio.h> +#include <dlfcn.h> +#include <stdint.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> + +#define LIBNAME "libafk.so" + +#define LIBAFK "libafk-temp.so" +#define LIBAFK_BAK ".libafk-temp.so.temp" + +int main(int argc, char **argv) +{ + void *handle; + + if (rename(LIBAFK, LIBAFK_BAK)) { + fprintf(stderr, "Unable to rename %s: %s\n", LIBAFK, strerror(errno)); + return EXIT_FAILURE; + } + + handle = dlopen(LIBNAME, RTLD_NOW); + if (!handle) { + fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror()); + return EXIT_FAILURE; + } + + if (rename(LIBAFK_BAK, LIBAFK)) { + fprintf(stderr, "Unable to rename %s: %s\n", LIBAFK_BAK, strerror(errno)); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/test/dlopen/libafk-temp.c b/test/dlopen/libafk-temp.c new file mode 100644 index 000000000..39b58df27 --- /dev/null +++ b/test/dlopen/libafk-temp.c @@ -0,0 +1 @@ +/* the actual contents doesnt matter */ diff --git a/test/dlopen/libafk.c b/test/dlopen/libafk.c new file mode 100644 index 000000000..39b58df27 --- /dev/null +++ b/test/dlopen/libafk.c @@ -0,0 +1 @@ +/* the actual contents doesnt matter */ diff --git a/test/dlopen/libundef.c b/test/dlopen/libundef.c index bf44c3c68..39b58df27 100644 --- a/test/dlopen/libundef.c +++ b/test/dlopen/libundef.c @@ -1,15 +1 @@ -#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); -} +/* the actual contents doesnt matter */ |