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