about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--elf/Makefile14
-rw-r--r--elf/reldep8.c16
-rw-r--r--elf/reldep8mod1.c19
-rw-r--r--elf/reldep8mod2.c7
-rw-r--r--elf/reldep8mod3.c1
6 files changed, 62 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index c1d35fbbe6..8ab940dbd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2002-12-30  Ulrich Drepper  <drepper@redhat.com>
+
+	* elf/Makefile: Add rules to build and run reldep8 test.
+	* elf/reldep8.c: New file.
+	* elf/reldep8mod1.c: New file.
+	* elf/reldep8mod2.c: New file.
+	* elf/reldep8mod3.c: New file.
+	Contributed by Jakub Jelinek.
+
 2002-12-24  GOTO Masanori  <gotom@debian.or.jp>
 
 	* sysdeps/unix/sysv/linux/getdents.c (__GETDENTS): Fix condition
diff --git a/elf/Makefile b/elf/Makefile
index 819d336da0..babbec7d04 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -72,7 +72,8 @@ distribute	:= rtld-Rules \
 		   tst-tlsmod5.c tst-tlsmod6.c \
 		   circlemod1.c circlemod1a.c circlemod2.c circlemod2a.c \
 		   circlemod3.c circlemod3a.c nodlopenmod2.c \
-		   tls-macros.h
+		   tls-macros.h \
+		   reldep8mod1.c reldep8mod2.c reldep8mod3.c
 
 include ../Makeconfig
 
@@ -135,8 +136,8 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
 	 reldep reldep2 reldep3 reldep4 $(tests-nodelete-$(have-z-nodelete)) \
 	 $(tests-nodlopen-$(have-z-nodlopen)) neededtest neededtest2 \
 	 neededtest3 neededtest4 unload2 lateglobal initfirst global \
-	 restest2 next dblload dblunload reldep5 reldep6 reldep7 circleload1 \
-	 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8
+	 restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
+	 circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8
 test-srcs = tst-pathopt
 tests-vis-yes = vismain
 tests-nodelete-yes = nodelete
@@ -158,7 +159,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 		tst-tlsmod1 tst-tlsmod2 tst-tlsmod3 tst-tlsmod4 \
 		tst-tlsmod5 tst-tlsmod6 \
 		circlemod1 circlemod1a circlemod2 circlemod2a \
-		circlemod3 circlemod3a
+		circlemod3 circlemod3a \
+		reldep8mod1 reldep8mod2 reldep8mod3
 ifeq (yes,$(have-initfini-array))
 modules-names += tst-array2dep
 endif
@@ -361,6 +363,7 @@ $(objpfx)reldep6mod2.so: $(objpfx)reldep6mod1.so
 $(objpfx)reldep6mod3.so: $(objpfx)reldep6mod2.so
 $(objpfx)reldep6mod4.so: $(objpfx)reldep6mod1.so
 $(objpfx)tst-tlsmod3.so: $(objpfx)tst-tlsmod2.so
+$(objpfx)reldepmod3.so: $(objpfx)reldepmod1.so $(objpfx)reldepmod2.so
 
 LDFLAGS-tst-tlsmod5.so = -nostdlib
 LDFLAGS-tst-tlsmod6.so = -nostdlib
@@ -525,6 +528,9 @@ $(objpfx)reldep6.out: $(objpfx)reldep6mod3.so $(objpfx)reldep6mod4.so
 $(objpfx)reldep7: $(libdl)
 $(objpfx)reldep7.out: $(objpfx)reldep7mod1.so $(objpfx)reldep7mod2.so
 
+$(objpfx)reldep8: $(libdl)
+$(objpfx)reldep8.out: $(objpfx)reldep8mod3.so
+
 $(objpfx)tst-tls3: $(objpfx)tst-tlsmod1.so
 
 $(objpfx)tst-tls4: $(libdl)
diff --git a/elf/reldep8.c b/elf/reldep8.c
new file mode 100644
index 0000000000..90009a5609
--- /dev/null
+++ b/elf/reldep8.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+
+int
+main (void)
+{
+  void *handle = dlopen ("reldep8mod3.so", RTLD_LAZY);
+  if (handle == NULL)
+    {
+      printf ("%s\n", dlerror ());
+      exit (1);
+    }
+  dlclose (handle);
+  abort ();
+}
diff --git a/elf/reldep8mod1.c b/elf/reldep8mod1.c
new file mode 100644
index 0000000000..acddc4cf8b
--- /dev/null
+++ b/elf/reldep8mod1.c
@@ -0,0 +1,19 @@
+#include <stdlib.h>
+void
+foo (void)
+{
+  exit (0);
+}
+
+void
+__attribute__((destructor))
+bar (void)
+{
+  static int i;
+  foo ();
+  ++i;
+}
+void
+baz (void)
+{
+}
diff --git a/elf/reldep8mod2.c b/elf/reldep8mod2.c
new file mode 100644
index 0000000000..d0020240a8
--- /dev/null
+++ b/elf/reldep8mod2.c
@@ -0,0 +1,7 @@
+void
+__attribute__((constructor))
+xxx (void)
+{
+  extern void baz (void);
+  baz ();
+}
diff --git a/elf/reldep8mod3.c b/elf/reldep8mod3.c
new file mode 100644
index 0000000000..6d1a0d47b7
--- /dev/null
+++ b/elf/reldep8mod3.c
@@ -0,0 +1 @@
+int x;