m32c padding with nops
authorAlan Modra <amodra@gmail.com>
Sat, 4 May 2019 06:33:47 +0000 (16:03 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 4 May 2019 07:53:18 +0000 (17:23 +0930)
commit27cdfa03b5be812683c18e64009a5da042190ae6
treef2c6abd546ec1b2c9a7f215914f569cd29a8c0c2
parenta288c270991de1578ad28ac312120f4167347234
m32c padding with nops

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.
gas/ChangeLog
gas/config/tc-m32c.c
gas/config/tc-m32c.h
gas/testsuite/gas/all/align.d
gas/testsuite/gas/all/gas.exp
gas/testsuite/gas/all/incbin.d
gas/testsuite/gas/elf/dwarf2-11.d
gas/testsuite/gas/macros/semi.d
ld/ChangeLog
ld/testsuite/ld-scripts/fill.d
ld/testsuite/ld-scripts/fill16.d