From: Alan Modra Date: Tue, 10 Dec 2019 22:07:53 +0000 (+1030) Subject: ubsan: s12z: left shift cannot be represented in type 'int' X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=205c426a9bb387204a21165e2275e31c32248035;hp=fb4cb4e26d16f928f00973fcdc99934c9174c957;p=deliverable%2Fbinutils-gdb.git ubsan: s12z: left shift cannot be represented in type 'int' * s12z-opc.c (z_decode_signed_value): Avoid signed overflow. --- diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index ddf8cd0072..a8e1d30a9d 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,7 @@ +2019-12-11 Alan Modra + + * s12z-opc.c (z_decode_signed_value): Avoid signed overflow. + 2019-12-11 Alan Modra * ns32k-dis.c (bit_extract): Use unsigned arithmetic. diff --git a/opcodes/s12z-opc.c b/opcodes/s12z-opc.c index 3e0c0e0582..044c72a21c 100644 --- a/opcodes/s12z-opc.c +++ b/opcodes/s12z-opc.c @@ -410,9 +410,7 @@ z_decode_signed_value (struct mem_read_abstraction_base *mra, int offset, int i; uint32_t value = 0; for (i = 0; i < size; ++i) - { - value |= buffer[i] << (8 * (size - i - 1)); - } + value = (value << 8) | buffer[i]; if (buffer[0] & 0x80) {