This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] PR gas/20312: Do not pad sections to alignment on failed assembly
- From: Alan Modra <amodra at gmail dot com>
- To: "Maciej W. Rozycki" <macro at imgtec dot com>
- Cc: binutils at sourceware dot org, Nick Clifton <nickc at redhat dot com>
- Date: Wed, 29 Jun 2016 11:22:11 +0930
- Subject: Re: [PATCH] PR gas/20312: Do not pad sections to alignment on failed assembly
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 00 dot 1606290102220 dot 4103 at tp dot orcam dot me dot uk>
On Wed, Jun 29, 2016 at 01:38:50AM +0100, Maciej W. Rozycki wrote:
> Correct a regression from commit 85024cd8bcb9 ("Run write_object_file
> after errors") causing unsuccessful assembly, which may be due to any
> reason, such as supplying a valid source like this:
>
> .text
> .byte 0
> .err
>
> to terminate with an assertion failure like:
>
> test.s: Assembler messages:
> test.s:3: Error: .err encountered
> ../as-new: BFD (GNU Binutils) 2.24.51.20140628 internal error, aborting at .../gas/write.c line 608 in size_seg
> ../as-new: Please report this bug.
>
> on targets whose default text section alignment is above 0, typically
> RISC machines.
>
> This is due to an attempt to set last text section's frag alignment to
> 0, requested from `subsegs_finish_section' where `frag_align_code
> (alignment, 0)' is called with `alignment' set to 0 rather than the
> section alignment if `had_errors' has returned true. The call to
> `subsegs_finish_section' is made from `subsegs_finish' from
> `write_object_file' at unsuccessful completion, which previously wasn't
> made.
>
> Always set last section's frag alignment from the section alignment
> then, forcing no section padding instead if completing unsuccessfully,
> so that in that case alignment padding is still suppressed from any
> listing generated, fixing assertion failures for these targets:
>
> alpha-linuxecoff -FAIL: all pr20312
> arm-aout -FAIL: all pr20312
> mips-freebsd -FAIL: all pr20312
> mips-img-linux -FAIL: all pr20312
> mips-linux -FAIL: all pr20312
> mips-mti-linux -FAIL: all pr20312
> mips-netbsd -FAIL: all pr20312
> mips-sgi-irix5 -FAIL: all pr20312
> mips-sgi-irix6 -FAIL: all pr20312
> mips-vxworks -FAIL: all pr20312
> mips64-freebsd -FAIL: all pr20312
> mips64-img-linux -FAIL: all pr20312
> mips64-linux -FAIL: all pr20312
> mips64-mti-linux -FAIL: all pr20312
> mips64-openbsd -FAIL: all pr20312
> mips64el-freebsd -FAIL: all pr20312
> mips64el-img-linux -FAIL: all pr20312
> mips64el-linux -FAIL: all pr20312
> mips64el-mti-linux -FAIL: all pr20312
> mips64el-openbsd -FAIL: all pr20312
> mipsel-freebsd -FAIL: all pr20312
> mipsel-img-linux -FAIL: all pr20312
> mipsel-linux -FAIL: all pr20312
> mipsel-mti-linux -FAIL: all pr20312
> mipsel-netbsd -FAIL: all pr20312
> mipsel-vxworks -FAIL: all pr20312
> mipsisa32-linux -FAIL: all pr20312
> mipsisa32el-linux -FAIL: all pr20312
> mipsisa64-linux -FAIL: all pr20312
> mipsisa64el-linux -FAIL: all pr20312
> sh-pe -FAIL: all pr20312
> sparc-aout -FAIL: all pr20312
>
> gas/
> PR gas/20312
> * write.c (subsegs_finish_section): Force no section padding to
> alignment on failed assembly, always set last frag's alignment
> from section.
> * testsuite/gas/all/pr20312.l: New list test.
> * testsuite/gas/all/pr20312.s: New test source.
> * testsuite/gas/all/gas.exp: Run the new test
OK. Please also move the do_not_pad_sections_to_alignment test in
the write.c:SUB_SEGMENT_ALIGN definition to the use of
SUB_SEGMENT_ALIGN. There are a couple of targets that define their
own SUB_SEGMENT_ALIGN that would otherwise need modifying to hee
do_not_pad_sections_to_alignment.
--
Alan Modra
Australia Development Lab, IBM