[binutils-gdb] ubsan: xtensa: left shift cannot be represented in type 'int'

Alan Modra amodra@sourceware.org
Fri Dec 20 09:57:00 GMT 2019


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e76832f125f6f005ddf3c75b7be675272568b01e

commit e76832f125f6f005ddf3c75b7be675272568b01e
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Dec 20 12:44:33 2019 +1030

    ubsan: xtensa: left shift cannot be represented in type 'int'
    
    	* xtensa-isa.c (xtensa_insnbuf_from_chars): Avoid signed overflow.

Diff:
---
 bfd/ChangeLog    | 4 ++++
 bfd/xtensa-isa.c | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 14aebd9..40f4b66 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,9 @@
 2019-12-20  Alan Modra  <amodra@gmail.com>
 
+	* xtensa-isa.c (xtensa_insnbuf_from_chars): Avoid signed overflow.
+
+2019-12-20  Alan Modra  <amodra@gmail.com>
+
 	* libhppa.h (hppa_field_adjust, bfd_hppa_insn2fmt): Delete forward
 	declaration.  Move ATTRIBUTE_UNUSED to definition.
 	(sign_extend, low_sign_extend, sign_unext, low_sign_unext),
diff --git a/bfd/xtensa-isa.c b/bfd/xtensa-isa.c
index 172de6f..9ddc6cd 100644
--- a/bfd/xtensa-isa.c
+++ b/bfd/xtensa-isa.c
@@ -223,7 +223,7 @@ xtensa_insnbuf_from_chars (xtensa_isa isa,
       int word_inx = byte_to_word_index (i);
       int bit_inx = byte_to_bit_index (i);
 
-      insn[word_inx] |= (*cp & 0xff) << bit_inx;
+      insn[word_inx] |= (unsigned) (*cp & 0xff) << bit_inx;
     }
 }



More information about the Binutils-cvs mailing list