* elf/Makefile (tests): Add loadfail.
Add rules to build failobj.so.
* elf/loadfail.c: New file. Test of failing to load object with
RTLD_GLOBAL set.
* elf/failobj.c: New file. Object which will fail to load.
1999-01-20 Ulrich Drepper <drepper@cygnus.com>
+ * elf/Makefile (tests): Add loadfail.
+ Add rules to build failobj.so.
+ * elf/loadfail.c: New file. Test of failing to load object with
+ RTLD_GLOBAL set.
+ * elf/failobj.c: New file. Object which will fail to load.
+
* elf/dl-close.c (_dl_close): Fix last patch (cnt is unsigned).
* elf/dl-close.c: Handle failed loads which would have gone in the
install-rootsbin += ldconfig
endif
-tests = loadtest restest1 preloadtest
+tests = loadtest restest1 preloadtest loadfail
include ../Rules
endif
\f
modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
- testobj1_1
+ testobj1_1 failobj
test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names)))
generated += $(test-modules)
LDLIBS-testobj4.so = -ldl
LDLIBS-testobj5.so = -ldl
LDLIBS-testobj6.so = -ldl
+LDLIBS-failobj.so = $(objpfx)testobj6.so
$(test-modules): $(objpfx)%.so: %.c
$(build-module)
$(objpfx)preloadtest.out: $(test-modules)
LDFLAGS-preloadtest = -rdynamic $(objpfx)testobj6.so
preloadtest-ENV = LD_PRELOAD=testobj1.so:testobj2.so:testobj3.so:testobj4.so:testobj5.so
+
+$(objpfx)loadfail: $(objpfx)libdl.so
+LDFLAGS-loadfail = -rdynamic
+
+$(objpfx)loadfile.out: $(objpfx)failobj.so
\f
# muwahaha
--- /dev/null
+/* This function is supposed to not exist. */
+int
+foo (int a)
+{
+ return xyzzy (a);
+}
--- /dev/null
+#include <dlfcn.h>
+#include <error.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+ void *h;
+
+ if (dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
+ || dlopen ("testobj1.so", RTLD_GLOBAL | RTLD_NOW) == NULL
+ || dlopen ("testobj2.so", RTLD_GLOBAL | RTLD_NOW) == NULL
+ || dlopen ("testobj3.so", RTLD_GLOBAL | RTLD_NOW) == NULL
+ || dlopen ("testobj4.so", RTLD_GLOBAL | RTLD_NOW) == NULL
+ || dlopen ("testobj5.so", RTLD_GLOBAL | RTLD_NOW) == NULL)
+ error (EXIT_FAILURE, 0, "failed to load shared object: %s", dlerror ());
+
+ h = dlopen ("failobj.so", RTLD_GLOBAL | RTLD_NOW);
+
+ printf ("h = %p, %s\n", h, h == NULL ? "ok" : "fail");
+
+ return h != NULL;
+}
+
+int
+foo (int a)
+{
+ return 10;
+}