svn commit: trunk/uClibc/test/dlopen
vapier at uclibc.org
vapier at uclibc.org
Fri Feb 16 21:35:21 UTC 2007
Author: vapier
Date: 2007-02-16 13:35:21 -0800 (Fri, 16 Feb 2007)
New Revision: 17915
Log:
make sure static variables are re-initialized everytime
Added:
trunk/uClibc/test/dlopen/dlstatic.c
trunk/uClibc/test/dlopen/libstatic.c
Modified:
trunk/uClibc/test/dlopen/
trunk/uClibc/test/dlopen/Makefile
Changeset:
Property changes on: trunk/uClibc/test/dlopen
___________________________________________________________________
Name: svn:ignore
- dltest
dltest2
test1
test2
test3
*_glibc
*.so
*.gdb
*.out
+ dltest
dltest2
dlstatic
test1
test2
test3
*_glibc
*.so
*.gdb
*.out
Modified: trunk/uClibc/test/dlopen/Makefile
===================================================================
--- trunk/uClibc/test/dlopen/Makefile 2007-02-16 21:34:34 UTC (rev 17914)
+++ trunk/uClibc/test/dlopen/Makefile 2007-02-16 21:35:21 UTC (rev 17915)
@@ -4,24 +4,26 @@
# rules need a little love to work with glibc ...
export UCLIBC_ONLY := 1
-TESTS := dltest dltest2 test1 test2 test3
+TESTS := dltest dltest2 dlstatic test1 test2 test3
include ../Test.mak
-CFLAGS_dltest := -DLIBNAME="\"./libtest.so\""
-CFLAGS_dltest2 := -DLIBNAME="\"./libtest3.so\""
+CFLAGS_dltest := -DLIBNAME="\"./libtest.so\""
+CFLAGS_dltest2 := -DLIBNAME="\"./libtest3.so\""
-LDFLAGS_dltest := -ldl -lpthread
-LDFLAGS_dltest2 := -ldl -lpthread
-LDFLAGS_test1 := -ldl
-LDFLAGS_test2 := -ldl
-LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,.
+LDFLAGS_dlstatic := -ldl
+LDFLAGS_dltest := -ldl -lpthread
+LDFLAGS_dltest2 := -ldl -lpthread
+LDFLAGS_test1 := -ldl
+LDFLAGS_test2 := -ldl
+LDFLAGS_test3 := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,.
DEBUG_LIBS := X
WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)"
dltest: libtest.so
dltest2: libtest3.so
+dlstatic: libstatic.so
test1: libtest1.so
test2: libtest1.so libtest2.so
test3: libtest1.so libtest2.so
Added: trunk/uClibc/test/dlopen/dlstatic.c
===================================================================
--- trunk/uClibc/test/dlopen/dlstatic.c (rev 0)
+++ trunk/uClibc/test/dlopen/dlstatic.c 2007-02-16 21:35:21 UTC (rev 17915)
@@ -0,0 +1,43 @@
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <dlfcn.h>
+#include <stdint.h>
+
+#define LIBNAME "libstatic.so"
+
+int load_and_test(void)
+{
+ void *handle;
+ int (*mystatic)(void);
+
+ handle = dlopen(LIBNAME, RTLD_LAZY);
+ if (!handle) {
+ fprintf(stderr, "Could not open ./%s: %s\n", LIBNAME, dlerror());
+ return 1;
+ }
+
+ mystatic = dlsym(handle, "static_test");
+ if (mystatic == NULL) {
+ fprintf(stderr, "Could not locate symbol 'static_test': %s\n", dlerror());
+ return 1;
+ }
+
+ if (!mystatic()) {
+ fprintf(stderr, "mystatic() failed: static vars were not setup properly\n");
+ return 1;
+ }
+
+ dlclose(handle);
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int count = 5;
+ while (count-- > 0)
+ if (load_and_test())
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+}
Added: trunk/uClibc/test/dlopen/libstatic.c
===================================================================
--- trunk/uClibc/test/dlopen/libstatic.c (rev 0)
+++ trunk/uClibc/test/dlopen/libstatic.c 2007-02-16 21:35:21 UTC (rev 17915)
@@ -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);
+}
More information about the uClibc-cvs
mailing list