mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-16 20:32:21 +08:00
S12Z: Opcodes: Fix crash when trying to decode a truncated operation.
opcodes/ * s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails. gas/ * testsuite/gas/s12z/truncated.d: New file. * testsuite/gas/s12z/truncated.s: New file. * testsuite/gas/s12z/s12z.exp: Add new test.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2019-04-29 John Darrington <john@darrington.wattle.id.au>
|
||||||
|
|
||||||
|
* testsuite/gas/s12z/truncated.d: New file.
|
||||||
|
* testsuite/gas/s12z/truncated.s: New file.
|
||||||
|
* testsuite/gas/s12z/s12z.exp: Add new test.
|
||||||
|
|
||||||
2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com>
|
2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com>
|
||||||
Faraz Shahbazker <fshahbazker@wavecomp.com>
|
Faraz Shahbazker <fshahbazker@wavecomp.com>
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ run_dump_test lea-immu18
|
|||||||
run_dump_test ext24-ld-xy
|
run_dump_test ext24-ld-xy
|
||||||
run_dump_test st-xy
|
run_dump_test st-xy
|
||||||
run_dump_test bit-manip-invalid
|
run_dump_test bit-manip-invalid
|
||||||
|
run_dump_test truncated
|
||||||
|
|
||||||
# Symbol related tests
|
# Symbol related tests
|
||||||
run_dump_test opr-symbol
|
run_dump_test opr-symbol
|
||||||
|
17
gas/testsuite/gas/s12z/truncated.d
Normal file
17
gas/testsuite/gas/s12z/truncated.d
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#objdump: -d
|
||||||
|
#name: Handle truncated instruction gracefully.
|
||||||
|
#source: truncated.s
|
||||||
|
|
||||||
|
|
||||||
|
.*: file format elf32-s12z
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000 <.text>:
|
||||||
|
0: 01 nop
|
||||||
|
1: Address 0x0000000000000002 is out of bounds.
|
||||||
|
Address 0x0000000000000002 is out of bounds.
|
||||||
|
Address 0x0000000000000002 is out of bounds.
|
||||||
|
!!invalid!!
|
||||||
|
|
3
gas/testsuite/gas/s12z/truncated.s
Normal file
3
gas/testsuite/gas/s12z/truncated.s
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
nop
|
||||||
|
;; This is a valid start of an instruction. But it stops in the middle.
|
||||||
|
dc.b 0x14
|
@ -1,3 +1,7 @@
|
|||||||
|
2019-04-29 John Darrington <john@darrington.wattle.id.au>
|
||||||
|
|
||||||
|
* s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails.
|
||||||
|
|
||||||
2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com>
|
2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com>
|
||||||
Faraz Shahbazker <fshahbazker@wavecomp.com>
|
Faraz Shahbazker <fshahbazker@wavecomp.com>
|
||||||
|
|
||||||
|
@ -2292,7 +2292,7 @@ shift_discrim (struct mem_read_abstraction_base *mra, enum optr hint ATTRIBUTE_
|
|||||||
uint8_t sb;
|
uint8_t sb;
|
||||||
int status = mra->read (mra, 0, 1, &sb);
|
int status = mra->read (mra, 0, 1, &sb);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return status;
|
return OP_INVALID;
|
||||||
|
|
||||||
enum SB_DIR dir = (sb & 0x40) ? SB_LEFT : SB_RIGHT;
|
enum SB_DIR dir = (sb & 0x40) ? SB_LEFT : SB_RIGHT;
|
||||||
enum SB_TYPE type = (sb & 0x80) ? SB_ARITHMETIC : SB_LOGICAL;
|
enum SB_TYPE type = (sb & 0x80) ? SB_ARITHMETIC : SB_LOGICAL;
|
||||||
|
Reference in New Issue
Block a user