[uClibc-cvs] uClibc/test/dlopen dltest.c, NONE, 1.1 libtest.c, NONE, 1.1 .cvsignore, 1.1, 1.2 Makefile, 1.2, 1.3

Erik Andersen andersen at uclibc.org
Mon Sep 1 23:43:30 UTC 2003


Update of /var/cvs/uClibc/test/dlopen
In directory winder:/tmp/cvs-serv17231/dlopen

Modified Files:
	.cvsignore Makefile 
Added Files:
	dltest.c libtest.c 
Log Message:
move the ldso tests to dlopen where they belong


Index: .cvsignore
===================================================================
RCS file: /var/cvs/uClibc/test/dlopen/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- .cvsignore	19 Aug 2003 14:25:45 -0000	1.1
+++ .cvsignore	1 Sep 2003 23:43:27 -0000	1.2
@@ -6,3 +6,8 @@
 test1
 test2
 test3
+dltest
+dltest2
+libtest.so
+libtest3.so
+.gdbinit

Index: Makefile
===================================================================
RCS file: /var/cvs/uClibc/test/dlopen/Makefile,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- Makefile	19 Aug 2003 14:24:14 -0000	1.2
+++ Makefile	1 Sep 2003 23:43:27 -0000	1.3
@@ -1,6 +1,6 @@
 # Makefile for uClibc
 #
-# Copyright (C) 2000,2001 Erik Andersen <andersen at uclibc.org>
+# Copyright (C) 2000-2003 Erik Andersen <andersen at uclibc.org>
 #
 # This program is free software; you can redistribute it and/or modify it under
 # the terms of the GNU Library General Public License as published by the Free
@@ -15,6 +15,7 @@
 # You should have received a copy of the GNU Library General Public License
 # along with this program; if not, write to the Free Software Foundation, Inc.,
 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# Makefile for uClibc
 
 TESTDIR=../
 include $(TESTDIR)/Rules.mak
@@ -42,13 +43,32 @@
 libtest2.so: libtest2.o
 	$(CC) $(CFLAGS) -fPIC -shared -o libtest2.so -Wl,-soname,libtest2.so libtest2.o
 
-run: libtest2.so libtest1.so test1 test2 test3
+dltest: dltest.c
+	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest.so\"" dltest.c -ldl -lpthread -o dltest
+
+libtest.so: libtest.c
+	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest.so libtest.c -o libtest.so
+
+# Second time, directly link libtest3.so with libpthread
+dltest2: dltest.c
+	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest3.so\"" dltest.c -ldl -lpthread -o dltest2
+
+libtest3.so: libtest.c
+	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest3.so libtest.c -o libtest3.so -lpthread
+
+run: libtest2.so libtest1.so test1 test2 test3 dltest libtest.so dltest2 libtest3.so
 	@echo "----------running test 1--------------"
 	-LD_LIBRARY_PATH=`pwd`:. LD_DEBUG=all ./test1
 	@echo "----------running test 2--------------"
 	-LD_LIBRARY_PATH=`pwd`:. LD_DEBUG=all ./test2
 	@echo "----------running test 3--------------"
 	-LD_LIBRARY_PATH=`pwd`:. LD_DEBUG=all ./test3
+	@echo "----------running test 3--------------"
+	-LD_DEBUG=all ./dltest2
+	@echo "----------running test 4--------------"
+	-LD_DEBUG=all ./dltest
 
 clean:
-	rm -f *.o libtest1.so* libtest2.so* test1 test2 test3
+	rm -f *.o libtest1.so* libtest2.so* test1 test2 test3 \
+		dltest dltest2 libtest.so libtest3.so
+

--- NEW FILE: libtest.c ---
#include <stdio.h>
#include <pthread.h>
#include <stdint.h>

extern int __pthread_return_0(void);

void dltest(uint32_t **value1, uint32_t **value2)
{
	*value1 = (uint32_t *) __pthread_return_0;
	*value2 = (uint32_t *) pthread_self;
#if 0
	printf("dltest: __pthread_return_0=%p\n", __pthread_return_0);
	printf("dltest: pthread_self=%p\n", pthread_self);
#endif
}


--- NEW FILE: dltest.c ---
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
#include <stdint.h>

#ifdef __UCLIBC__
extern void _dlinfo(void);
#endif

int main(int argc, char **argv) 
{
	int ret = EXIT_SUCCESS;
	void *handle;
	void (*mydltest)(void *value1, void *value2);
	char *error;
	uint32_t *value1, *value2;

	handle = dlopen (LIBNAME, RTLD_LAZY);
	if (!handle) {
		fprintf(stderr, "Could not open ./libtest.so: %s\n", dlerror());
		exit(1);
	}

	mydltest = dlsym(handle, "dltest");
	if ((error = dlerror()) != NULL)  {
		fprintf(stderr, "Could not locate symbol 'dltest': %s\n", error);
		exit(1);
	}

	mydltest(&value1, &value2);
	printf("dltest: __pthread_return_0=%p\n", value1);
	printf("dltest: pthread_self=%p\n", value2);
	if (value1 == value2) {
	    ret = EXIT_FAILURE;
	    printf("dltest: values should NOT be equal  Weak values resolved incorrectly!\n");
	} else {
	    printf("dltest: weak symbols resoved correctly.\n");
	}

	dlclose(handle);

	return ret;
}





More information about the uClibc-cvs mailing list