mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
27cdfa03b5
m32c_md_end attempted to pad out a code section with nops, but this was just plain wrong in many ways: - The padding didn't happen at all if the last section emitted wasn't a code section. - The padding went to the wrong place if subsections were used, and the last subseg used wasn't the highest numbered subseg. - Padding wasn't added to all code sections. - If the last section was empty, it was padded to 4 bytes. - The padding didn't go to a 4-byte alignment boundary, instead it effectively made the last instruction 4 bytes in size. - The padding didn't take into account that code sections may have contents other than machine instructions. So, rip it out and handle nop padding properly, also fixing .align .balign/.p2align in the middle of code. gas/ * config/tc-m32c.c (insn_size): Delete static var. (md_begin): Don't set it. (m32c_md_end): Delete. (md_assemble): Add insn_size auto var. * config/tc-m32c.h (md_end): Don't define. (m32c_md_end): Delete. (NOP_OPCODE, HANDLE_ALIGN, MAX_MEM_FOR_RS_ALIGN_CODE): Define. * testsuite/gas/all/align.d: Remove m32c from notarget list. * testsuite/gas/all/incbin.d: Likewise. * testsuite/gas/elf/dwarf2-11.d: Likewise. * testsuite/gas/macros/semi.d: Likewise. * testsuite/gas/all/gas.exp (do_comment): Similarly. ld/ * testsuite/ld-scripts/fill.d: Don't xfail m32c * testsuite/ld-scripts/fill16.d: Likewise.
37 lines
1.4 KiB
Makefile
37 lines
1.4 KiB
Makefile
#source: fill_0.s
|
|
#source: fill_1.s
|
|
#source: fill_2.s
|
|
#ld: -T fill.t
|
|
#objdump: -s -j .text
|
|
#skip: ia64-*-* mips*-*-freebsd* mips*-*-gnu* mips*-*-irix* mips*-*-kfreebsd*
|
|
#skip: mips*-*-linux* mips*-*-netbsd* mips*-*-openbsd* mips*-*-sysv4*
|
|
#skip: tilegx*-*-* tilepro-*-* x86_64-*-cygwin x86_64-*-mingw* x86_64-*-pe*
|
|
#xfail: alpha*-*-*ecoff sh-*-pe sparc*-*-coff
|
|
#xfail: tic30-*-coff tic4x-*-* tic54x-*-* z8k-*-*
|
|
#
|
|
# See also fill16.d. We use `skip' for configurations unsupported
|
|
# here that are covered there, and `xfail' for configurations that work
|
|
# in neither place. See below for details as to why individual
|
|
# configurations are listed above.
|
|
#
|
|
# alpha-linuxecoff pads out code to 16 bytes.
|
|
# ia64 aligns code to minimum 16 bytes.
|
|
# mips aligns to minimum 16 bytes (except for bare-metal ELF and VxWorks).
|
|
# 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
|
|
# tilegx aligns code to minimum 8 bytes.
|
|
# tilepro aligns code to minimum 8 bytes.
|
|
# 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 .*
|