Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 20 Jan 1999 20:01:17 +0000 (20:01 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 20 Jan 1999 20:01:17 +0000 (20:01 +0000)
* 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.

ChangeLog
elf/Makefile
elf/failobj.c [new file with mode: 0644]
elf/loadfail.c [new file with mode: 0644]

index 9da7770..d1899c7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 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
index f79a312..05bc446 100644 (file)
@@ -75,7 +75,7 @@ others                += ldconfig
 install-rootsbin += ldconfig
 endif
 
-tests = loadtest restest1 preloadtest
+tests = loadtest restest1 preloadtest loadfail
 
 include ../Rules
 
@@ -203,7 +203,7 @@ $(objpfx)sprof: $(objpfx)libdl.a
 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)
 
@@ -216,6 +216,7 @@ LDLIBS-testobj3.so = -ldl
 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)
@@ -233,6 +234,11 @@ $(objpfx)restest1.out: $(test-modules)
 $(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
 
diff --git a/elf/failobj.c b/elf/failobj.c
new file mode 100644 (file)
index 0000000..16228c7
--- /dev/null
@@ -0,0 +1,6 @@
+/* This function is supposed to not exist.  */
+int
+foo (int a)
+{
+  return xyzzy (a);
+}
diff --git a/elf/loadfail.c b/elf/loadfail.c
new file mode 100644 (file)
index 0000000..60deb77
--- /dev/null
@@ -0,0 +1,30 @@
+#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;
+}