diff options
author | Alan Modra <amodra@gmail.com> | 2014-04-04 11:45:03 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-04-04 19:06:35 +1030 |
commit | ffe54b3798db9112505e7f6b9d5e0d0b13823a29 (patch) | |
tree | d4bddfdbeb3aba9d668268998086de08da71dfc9 | |
parent | 4554c4528a3548320c020f9baf97485302624300 (diff) | |
download | fsf-binutils-gdb-ffe54b3798db9112505e7f6b9d5e0d0b13823a29.zip fsf-binutils-gdb-ffe54b3798db9112505e7f6b9d5e0d0b13823a29.tar.gz fsf-binutils-gdb-ffe54b3798db9112505e7f6b9d5e0d0b13823a29.tar.bz2 |
Pad sections according to current script FILL.
When aligning input sections, we are supposed to take the fill pattern
from a FILL statement, if there is one in the output section statement.
ld/
* ldlang.c (lang_size_sections_1 <lang_input_section_enum>): Use
current "fill", not "output_section_statement->fill".
ld/testsuite/
* ld-scripts/fill.d, * ld-scripts/fill.t, * ld-scripts/fill_0.s,
* ld-scripts/fill_1.s, * ld-scripts/fill_2.s: New test.
* ld-scripts/data.exp: Run it.
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/ldlang.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/data.exp | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/fill.d | 29 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/fill.t | 20 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/fill_0.s | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/fill_1.s | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/fill_2.s | 3 |
9 files changed, 71 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index d823aa4..5a3ddf2 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2014-04-04 Alan Modra <amodra@gmail.com> + + * ldlang.c (lang_size_sections_1 <lang_input_section_enum>): Use + current "fill", not "output_section_statement->fill". + 2014-03-31 Nick Clifton <nickc@redhat.com> PR ld/16744 diff --git a/ld/ldlang.c b/ld/ldlang.c index 37ef265..d147ee0 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -5213,7 +5213,7 @@ lang_size_sections_1 *relax = TRUE; } dot = size_input_section (prev, output_section_statement, - output_section_statement->fill, dot); + fill, dot); } break; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 0d36a4f..4d0fe20 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-04-04 Alan Modra <amodra@gmail.com> + + * ld-scripts/fill.d, * ld-scripts/fill.t, * ld-scripts/fill_0.s, + * ld-scripts/fill_1.s, * ld-scripts/fill_2.s: New test. + * ld-scripts/data.exp: Run it. + 2014-03-31 Marcus Shawcroft <marcus.shawcroft@arm.com> * ld-aarch64/eh-frame.d: Adjust FDE pc address. diff --git a/ld/testsuite/ld-scripts/data.exp b/ld/testsuite/ld-scripts/data.exp index 052bec7..ad25e9b 100644 --- a/ld/testsuite/ld-scripts/data.exp +++ b/ld/testsuite/ld-scripts/data.exp @@ -23,7 +23,9 @@ # text segment, confusing run_dump_test. if {[is_aout_format]} { unsupported data + unsupported fill return } run_dump_test data +run_dump_test fill diff --git a/ld/testsuite/ld-scripts/fill.d b/ld/testsuite/ld-scripts/fill.d new file mode 100644 index 0000000..8dd789b --- /dev/null +++ b/ld/testsuite/ld-scripts/fill.d @@ -0,0 +1,29 @@ +#source: fill_0.s +#source: fill_1.s +#source: fill_2.s +#ld: -T fill.t +#objdump: -s -j .text +#xfail: ia64-*-* alpha-*-*ecoff m32c-*-* mips*-*-* sh-*-pe sparc*-*-coff +#xfail: tic30-*-coff tic4x-*-* tic54x-*-* +#xfail: x86_64-*-pe* x86_64-*-mingw* x86_64-*-cygwin z8k-*-* +# Breaks on ia64 due to minimum alignment of code. The section alignment +# could be increased to suit ia64 but then we'd break many coff targets +# that don't support alignment other than 4 bytes. +# alpha-linuxecoff always aligns code to 16 bytes. +# m32c pads out code sections to 8 bytes. +# mips aligns to 16 bytes +# sh-pe pads out code sections to 16 bytes +# sparc-coff aligns to 8 bytes +# tic30-coff aligns to 2 bytes +# tic4x has 4 octet bytes +# tic54x doesn't support .p2align +# x86_64-pe aligns to 16 bytes +# z8k-coff aligns to 2 bytes + +.*: file format .* + +Contents of section .text: + [0-9a-f]+ cafebabe 01010101 02020202 12232323 .* + [0-9a-f]+ 03030303 00345600 00004567 000089ab .* + [0-9a-f]+ (deadbeef|efbeadde) 00004567 000089ab 0000cdef .* + [0-9a-f]+ 00004567 000089ab 0000cdef 00000123 .* diff --git a/ld/testsuite/ld-scripts/fill.t b/ld/testsuite/ld-scripts/fill.t new file mode 100644 index 0000000..835e009 --- /dev/null +++ b/ld/testsuite/ld-scripts/fill.t @@ -0,0 +1,20 @@ +SECTIONS +{ + .text : + { + . += 4; + *0.o(.text) + FILL (0x12) + *1.o(.text) + . += 1; + FILL (0x23) + *2.o(.text) + FILL (0x003456) + . += 4; + FILL (0x00004567000089ab0000cdef00000123) + . += 8; + LONG (0xdeadbeef) + . += 12; + . += 16; + } =0xcafebabe +} diff --git a/ld/testsuite/ld-scripts/fill_0.s b/ld/testsuite/ld-scripts/fill_0.s new file mode 100644 index 0000000..2494a6e --- /dev/null +++ b/ld/testsuite/ld-scripts/fill_0.s @@ -0,0 +1,2 @@ + .text + .byte 1,1,1,1 diff --git a/ld/testsuite/ld-scripts/fill_1.s b/ld/testsuite/ld-scripts/fill_1.s new file mode 100644 index 0000000..2bbb28e --- /dev/null +++ b/ld/testsuite/ld-scripts/fill_1.s @@ -0,0 +1,3 @@ + .text + .p2align 2 + .byte 2,2,2,2 diff --git a/ld/testsuite/ld-scripts/fill_2.s b/ld/testsuite/ld-scripts/fill_2.s new file mode 100644 index 0000000..0b85fb5 --- /dev/null +++ b/ld/testsuite/ld-scripts/fill_2.s @@ -0,0 +1,3 @@ + .text + .p2align 2 + .byte 3,3,3,3 |