More signed overflow fixes
authorAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2019 05:07:44 +0000 (15:37 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2019 08:08:13 +0000 (18:38 +1030)
commit2480b6fa946bb2d2dc993b1c4a83a8e1258a75e8
treece542aad0a4875a62960e77e23c4729b92d87da4
parent4a422785822ec9302f681c8fbc6ba2cc35231b09
More signed overflow fixes

The arc fix in create_map avoiding signed overflow by casting an
unsigned char to unsigned int before shifting, shows one of the
dangers of blinding doing that.  The problem in this case was that the
variable storing the value, newAuxRegister->address, was a long.
Using the unsigned cast meant that the 32-bit value was zero extended
when long is 64 bits.  Previously we had a sign extension.  Net result
was that comparisons in arcExtMap_auxRegName didn't match.  Of course,
I could have cast the 32-bit unsigned value back to signed before
storing in a long, but it's neater to just use an unsigned int for the
address.

opcodes/
* alpha-opc.c (OP): Avoid signed overflow.
* arm-dis.c (print_insn): Likewise.
* mcore-dis.c (print_insn_mcore): Likewise.
* pj-dis.c (get_int): Likewise.
* ppc-opc.c (EBD15, EBD15BI): Likewise.
* score7-dis.c (s7_print_insn): Likewise.
* tic30-dis.c (print_insn_tic30): Likewise.
* v850-opc.c (insert_SELID): Likewise.
* vax-dis.c (print_insn_vax): Likewise.
* arc-ext.c (create_map): Likewise.
(struct ExtAuxRegister): Make "address" field unsigned int.
(arcExtMap_auxRegName): Pass unsigned address.
(dump_ARC_extmap): Adjust.
* arc-ext.h (arcExtMap_auxRegName): Update prototype.
12 files changed:
opcodes/ChangeLog
opcodes/alpha-opc.c
opcodes/arc-ext.c
opcodes/arc-ext.h
opcodes/arm-dis.c
opcodes/mcore-dis.c
opcodes/pj-dis.c
opcodes/ppc-opc.c
opcodes/score7-dis.c
opcodes/tic30-dis.c
opcodes/v850-opc.c
opcodes/vax-dis.c