From 55b69ac7beb83b7c02a1d68fd84577cb3492772a Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 12 Mar 2007 19:44:58 +0000 Subject: make sure undefine references in dlopen()-ed libs are handled graciously --- test/dlopen/Makefile | 6 +++++- test/dlopen/dlafk.c | 36 ++++++++++++++++++++++++++++++++++++ test/dlopen/libafk-temp.c | 1 + test/dlopen/libafk.c | 1 + test/dlopen/libundef.c | 16 +--------------- 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 test/dlopen/dlafk.c create mode 100644 test/dlopen/libafk-temp.c create mode 100644 test/dlopen/libafk.c (limited to 'test/dlopen') 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 +#include +#include +#include +#include +#include +#include +#include + +#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 - -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 */ -- cgit v1.2.3