+2017-12-06 Jim Wilson <jimw@sifive.com>
+
+ PR 22465
+ * objcopy.c (copy_section): New local extra. If isection->lma not
+ exactly divisible by interleave, then bias from. Also adjust
+ osection->lma if necessary.
+
2017-12-06 Alan Modra <amodra@gmail.com>
PR 22552
char *end = (char *) memhunk + size;
int i;
+ /* If the section address is not exactly divisible by the interleave,
+ then we must bias the from address. If the copy_byte is less than
+ the bias, then we must skip forward one interleave, and increment
+ the final lma. */
+ int extra = isection->lma % interleave;
+ from -= extra;
+ if (copy_byte < extra)
+ from += interleave;
+
for (; from < end; from += interleave)
for (i = 0; i < copy_width; i++)
{
size = (size + interleave - 1 - copy_byte) / interleave * copy_width;
osection->lma /= interleave;
+ if (copy_byte < extra)
+ osection->lma++;
}
if (!bfd_set_section_contents (obfd, osection, memhunk, 0, size))
+2017-12-06 Jim Wilson <jimw@sifive.com>
+
+ * testsuite/ld-elf/interleave-0.d, testsuite/ld-elf/interleave-4.d,
+ * testsuite/ld-elf/interleave.ld, testsuite/ld-elf/interleave.s: New.
+
2017-12-06 Nick Clifton <nickc@redhat.com>
* testsuite/lib/ld-lib.exp (check_shared_lib_support): Return
--- /dev/null
+#name: --interleave test byte 0
+#source: interleave.s
+#ld: -Tinterleave.ld
+#objcopy: --interleave=8 --interleave-width=1 --byte=0 -O verilog
+
+@0+0
+00
+@0+2
+14
--- /dev/null
+#name: --interleave test byte 4
+#source: interleave.s
+#ld: -Tinterleave.ld
+#objcopy: --interleave=8 --interleave-width=1 --byte=4 -O verilog
+
+@0+0
+04
+@0+1
+10
--- /dev/null
+MEMORY
+{
+ x0(xrw): ORIGIN = 0x0, LENGTH = 8
+ x1(xrw): ORIGIN = 0xC, LENGTH = 8
+}
+SECTIONS
+{
+ .a0 : { *(.text.a0) } > x0
+ .a1 : { *(.text.a1) } > x1
+}
--- /dev/null
+ .section ".text.a0"
+ .byte 0x00
+ .byte 0x01
+ .byte 0x02
+ .byte 0x03
+ .byte 0x04
+ .byte 0x05
+ .byte 0x06
+ .byte 0x07
+ .section ".text.a1"
+ .byte 0x10
+ .byte 0x11
+ .byte 0x12
+ .byte 0x13
+ .byte 0x14
+ .byte 0x15
+ .byte 0x16
+ .byte 0x17