* elf/restest1.c: New file. Symbol resolution test.
* elf/testobj1_1.c: New file. Module used in this test.
* elf/Makefile: Add rules for restest1 generation and execution.
1999-01-19 Ulrich Drepper <drepper@cygnus.com>
+ * elf/restest1.c: New file. Symbol resolution test.
+ * elf/testobj1_1.c: New file. Module used in this test.
+ * elf/Makefile: Add rules for restest1 generation and execution.
+
* elf/dl-object.c (_dl_new_object): l_local_scope really gets
assigned the local scope.
install-rootsbin += ldconfig
endif
-tests = loadtest
+tests = loadtest restest1
include ../Rules
$(no-whole-archive) $(LDLIBS-$(@F:%.so=%).so)
endef
-modules-names = testobj1 testobj2 testobj3
+modules-names = testobj1 testobj2 testobj3 testobj1_1
test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names)))
generated += $(test-modules)
+$(objpfx)testobj1_1.so: $(objpfx)testobj1.so
+LDLIBS-testobj1_1.so = $(objpfx)testobj1.so
$(objpfx)testobj2.so: $(objpfx)testobj1.so
LDLIBS-testobj2.so = $(objpfx)testobj1.so
LDFLAGS-loadtest = -rdynamic
$(objpfx)loadtest.out: $(test-modules)
+
+$(objpfx)restest1: $(objpfx)libdl.so
+LDFLAGS-restest1 = -rdynamic $(objpfx)testobj1.so $(objpfx)testobj1_1.so
+
+$(objpfx)restest1.out: $(test-modules)
\f
# muwahaha
--- /dev/null
+#include <dlfcn.h>
+#include <error.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+ void *h1;
+ int (*fp1) (int);
+ void *h2;
+ int (*fp2) (int);
+ int res1;
+ int res2;
+
+ h1 = dlopen ("testobj1.so", RTLD_LAZY);
+ if (h1 == NULL)
+ error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1.so",
+ dlerror ());
+
+ h2 = dlopen ("testobj1_1.so", RTLD_LAZY);
+ if (h1 == NULL)
+ error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1_1.so",
+ dlerror ());
+
+ fp1 = dlsym (h1, "obj1func1");
+ if (fp1 == NULL)
+ error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s",
+ "testobj1.so", dlerror ());
+
+ fp2 = dlsym (h2, "obj1func1");
+ if (fp2 == NULL)
+ error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s",
+ "testobj1_1.so", dlerror ());
+
+ res1 = fp1 (10);
+ res2 = fp2 (10);
+ printf ("fp1(10) = %d\nfp2(10) = %d\n", res1, res2);
+
+ return res1 != 42 || res2 != 72;
+}
+
+
+int
+foo (int a)
+{
+ return a + 10;
+}
--- /dev/null
+int
+obj1func1 (int a)
+{
+ return 42 + obj1func2 (a);
+}