From 1e2623127469890c7912d12a8ba5bc70d068eb18 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 20 Jan 1999 20:01:17 +0000 Subject: [PATCH] Update. * 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 | 6 ++++++ elf/Makefile | 10 ++++++++-- elf/failobj.c | 6 ++++++ elf/loadfail.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 elf/failobj.c create mode 100644 elf/loadfail.c diff --git a/ChangeLog b/ChangeLog index 9da7770abb..d1899c7f09 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 1999-01-20 Ulrich Drepper + * 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 diff --git a/elf/Makefile b/elf/Makefile index f79a312dcf..05bc44637e 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -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 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 # muwahaha diff --git a/elf/failobj.c b/elf/failobj.c new file mode 100644 index 0000000000..16228c7bb3 --- /dev/null +++ b/elf/failobj.c @@ -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 index 0000000000..60deb7737b --- /dev/null +++ b/elf/loadfail.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +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; +} -- 2.11.4.GIT