100644
@@ -135,7 +135,9 @@ elf_machine_lazy_rel (struct link_map *map,
\
if (ranges[0].start + ranges[0].size == (start + size))
\
ranges[0].size -= size;
\
- if (! ELF_DURING_STARTUP && ((do_lazy) || ranges[0].size == 0))
\
+ if (! ELF_DURING_STARTUP
\
+ && ((do_lazy) || ranges[0].size == 0
\
+ || ranges[0].start + ranges[0].size != start))
\
{
\
ranges[1].start = start;
\
ranges[1].size = size;
\
mode 100644 index 0000000..bdb6b7c
@@ -0,0 +1,28 @@
+/* This test will be used to create an executable with a specific
+ section layout in which .rela.dyn and .rela.plt are not contiguous.
+ For x86 case, readelf will report something like:
+
+ ...
+ [10] .rela.dyn RELA
+ [11] .bar PROGBITS
+ [12] .rela.plt RELA
+ ...
+
+ This is important as this case was not correctly handled by dynamic
+ linker in the bind-now case, and the second section was never
+ processed. */
+
+#include <stdio.h>
+
+static int __attribute__ ((section(".bar"))) bar = 0x12345678; static
+const char foo[] = "foo";
+
+static int
+do_test (void)
+{
+ printf ("%s %d\n", foo, bar);
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
file mode 100644 index 0000000..ed0a656
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .bar : { *(.bar) }
+}
+INSERT AFTER .rela.dyn;
+
ef70a50..b9d949c 100644
@@ -38,6 +38,10 @@ tests += tst-audit3 tst-audit4 tst-audit5 tst-audit10
ifeq (yes,$(config-cflags-avx)) tests += tst-audit6 tst-audit7 endif
+
+tests += tst-split-dynreloc
+LDFLAGS-tst-split-dynreloc = -Wl,-T,tst-split-dynreloc.lds -Wl,-z,now
+
modules-names += tst-auditmod3a tst-auditmod3b \
tst-auditmod4a tst-auditmod4b \
tst-auditmod5a tst-auditmod5b \
--
1.7.9.5