summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--elf/Makefile10
-rw-r--r--elf/constload1.c20
-rw-r--r--elf/constload2.c24
-rw-r--r--elf/constload3.c7
5 files changed, 65 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c961978c4c..a36e3114ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-03-16 Ulrich Drepper <drepper@redhat.com>
+
+ * elf/Makefile: Add rules to compile and rune constload1 test.
+ * elf/constload1.c: New file.
+ * elf/constload2.c: New file.
+ * elf/constload3.c: New file.
+
2000-03-15 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/open64.c: Make __open64 weak alias.
diff --git a/elf/Makefile b/elf/Makefile
index b262418d19..1244e239b6 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -79,10 +79,11 @@ vpath %.c ../locale/programs
endif
ifeq (yes,$(build-shared))
-tests = loadtest restest1 preloadtest loadfail multiload origtest resolvfail
+tests = loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
+ constload1
endif
modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
- testobj1_1 failobj
+ testobj1_1 failobj constload2 constload3
extra-objs += $(modules-names:=.os)
include ../Rules
@@ -251,3 +252,6 @@ $(objpfx)resolvfail: $(libdl) $(shared-thread-library)
else
$(objpfx)resolvfail: $(libdl)
endif
+
+$(objpfx)constload1: $(libdl)
+$(objpfx)constload1.out: $(objpfx)constload2.so $(objpfx)constload3.so
diff --git a/elf/constload1.c b/elf/constload1.c
new file mode 100644
index 0000000000..1435284c62
--- /dev/null
+++ b/elf/constload1.c
@@ -0,0 +1,20 @@
+#include <dlfcn.h>
+#include <errno.h>
+#include <error.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+ int (*foo) (void);
+ void *h;
+ int ret;
+
+ h = dlopen ("constload2.so", RTLD_LAZY | RTLD_GLOBAL);
+ if (h == NULL)
+ error (EXIT_FAILURE, errno, "cannot load module \"constload2.so\"");
+ foo = dlsym (h, "foo");
+ ret = foo ();
+ dlclose (h);
+ return ret;
+}
diff --git a/elf/constload2.c b/elf/constload2.c
new file mode 100644
index 0000000000..f109838cb8
--- /dev/null
+++ b/elf/constload2.c
@@ -0,0 +1,24 @@
+#include <dlfcn.h>
+
+extern int bar (void);
+
+void *h;
+
+int
+foo (void)
+{
+ return 42 + bar ();
+}
+
+int
+baz (void)
+{
+ return -21;
+}
+
+void
+__attribute__ ((__constructor__))
+init (void)
+{
+ h = dlopen ("constload3.so", RTLD_GLOBAL | RTLD_LAZY);
+}
diff --git a/elf/constload3.c b/elf/constload3.c
new file mode 100644
index 0000000000..c9f94b86ee
--- /dev/null
+++ b/elf/constload3.c
@@ -0,0 +1,7 @@
+extern int baz (void);
+
+int
+bar (void)
+{
+ return -21 + baz ();
+}