diff options
author | Alan Modra <amodra@gmail.com> | 2018-02-08 10:18:59 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-02-08 13:56:29 +1030 |
commit | a9479dc051ab00f311c04cdd5b299a70739f67ed (patch) | |
tree | 125d66cdbfce4db95791983657b87e297cc688fc /gas/ChangeLog | |
parent | 02ecce62be3516c03f523b1665c9d151a16a39c6 (diff) | |
download | gdb-a9479dc051ab00f311c04cdd5b299a70739f67ed.zip gdb-a9479dc051ab00f311c04cdd5b299a70739f67ed.tar.gz gdb-a9479dc051ab00f311c04cdd5b299a70739f67ed.tar.bz2 |
PR22819, powerpc gas "instruction address is not a multiple of 4"
Checks for insn alignment were hopelessly confused when misaligned
data starts a new frag. The real-world testcase happened to run out
of frag space in the middle of emitting a trace-back table via
something like:
.byte 0 /* VERSION=0 */
.byte 9 /* LANG=C++ */
.byte 34 /* Bits on: has_tboff, fp_present */
.byte 64 /* Bits on: name_present */
.byte 128 /* Bits on: stores_bc, FP_SAVED=0 */
.byte 0 /* Bits on: GP_SAVED=0 */
.byte 2 /* FIXEDPARMS=2 */
.byte 1 /* FLOATPARMS=0, parmsonstk */
.long 0
.long 768 /* tb_offset: 0x300 */
.hword 45 /* Function name length: 45 */
.long 0x334e5a5f
.long 0x31766f70
.long 0x65744932
.long 0x69746172
.long 0x7a5f6e6f
.long 0x64504533
.long 0x5f534e50
.long 0x72463431
.long 0x61746361
.long 0x74535f6c
.long 0x74637572
.byte 0x45
.byte 0
The trigger being those misaligned .long's output for the function
name. A most horrible way to output a string, especially considering
endian issues..
PR 22819
* config/tc-ppc.c (md_assemble): Rewrite insn alignment checking.
(ppc_frag_check): Likewise.
* testsuite/gas/ppc/misalign.d,
* testsuite/gas/ppc/misalign.l,
* testsuite/gas/ppc/misalign.s: New test.
* testsuite/gas/ppc/misalign2.d,
* testsuite/gas/ppc/misalign2.s: New test.
* testsuite/gas/ppc/ppc.exp: Run them.
Diffstat (limited to 'gas/ChangeLog')
-rw-r--r-- | gas/ChangeLog | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 45ad93b..44d9682 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,15 @@ +2018-02-08 Alan Modra <amodra@gmail.com> + + PR 22819 + * config/tc-ppc.c (md_assemble): Rewrite insn alignment checking. + (ppc_frag_check): Likewise. + * testsuite/gas/ppc/misalign.d, + * testsuite/gas/ppc/misalign.l, + * testsuite/gas/ppc/misalign.s: New test. + * testsuite/gas/ppc/misalign2.d, + * testsuite/gas/ppc/misalign2.s: New test. + * testsuite/gas/ppc/ppc.exp: Run them. + 2018-02-05 Maciej W. Rozycki <macro@mips.com> * config/tc-riscv.c (riscv_handle_implicit_zero_offset): Rename |