ubsan: crx-dis.c:571 left shift of negative value

* crx-dis.c: Whitespace.
	(print_arg): Use unsigned type for longdisp and mask variables,
	and for left shift constant.
This commit is contained in:
Alan Modra 2020-09-02 10:42:53 +09:30
parent ae3e98b418
commit 3c5097eae4
2 changed files with 80 additions and 74 deletions

View file

@ -1,3 +1,9 @@
2020-09-02 Alan Modra <amodra@gmail.com>
* crx-dis.c: Whitespace.
(print_arg): Use unsigned type for longdisp and mask variables,
and for left shift constant.
2020-09-02 Alan Modra <amodra@gmail.com>
* cgen-ibld.in (insert_normal, extract_normal): Use 1UL in left shift.

View file

@ -481,7 +481,7 @@ make_argument (argument * a, int start_bits)
static void
print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
{
LONGLONG longdisp, mask;
ULONGLONG longdisp, mask;
int sign_flag = 0;
int relative = 0;
bfd_vma number;
@ -577,7 +577,7 @@ print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
case 24:
case 32:
mask = ((LONGLONG) 1 << a->size) - 1;
if (longdisp & ((LONGLONG)1 << a->size))
if (longdisp & ((ULONGLONG) 1 << a->size))
{
sign_flag = 1;
longdisp = ~(longdisp) + 1;