ubsan: xtensa: left shift cannot be represented in type 'int'
In Operand_soffsetx4_decode: soffsetx4_0 = 0x4 + ((((int) offset_0 << 14) >> 14) << 2); and other places. Don't sign extend with shifts! This file also has many occurrences of truncation via shifts, which aren't a problem due to using uint32, but I dislike on principle enough to fix. * xtensa-modules.c (Field_* functions): Don't mask using shifts. (Operand_soffsetx4_decode, Operand_simm4_decode), (Operand_simm8_decode, Operand_simm8x256_decode), (Operand_simm12b_decode, Operand_label8_decode), (Operand_label12_decode, Operand_soffset_decode), (Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't sign extend using shifts. (Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in constant.
This commit is contained in:
parent
b8e61daa1a
commit
567607c11f
@ -1,3 +1,15 @@
|
||||
2019-12-11 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* xtensa-modules.c (Field_* functions): Don't mask using shifts.
|
||||
(Operand_soffsetx4_decode, Operand_simm4_decode),
|
||||
(Operand_simm8_decode, Operand_simm8x256_decode),
|
||||
(Operand_simm12b_decode, Operand_label8_decode),
|
||||
(Operand_label12_decode, Operand_soffset_decode),
|
||||
(Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't
|
||||
sign extend using shifts.
|
||||
(Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in
|
||||
constant.
|
||||
|
||||
2019-12-11 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift
|
||||
|
1528
bfd/xtensa-modules.c
1528
bfd/xtensa-modules.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user