ubsan: i386-dis.c

i386-dis.c:12207 left shift of 128 by 24 places cannot be represented in type 'long int'
i386-dis.c:12220 left shift of 128 by 24 places cannot be represented in type 'long int'
i386-dis.c:12222 left shift of 1 by 31 places cannot be represented in type 'long int'
i386-dis.c:12222 signed integer overflow: 162254319 - -2147483648 cannot be represented in type 'long int'

	* i386-dis.c (OP_E_memory): Don't cast to signed type when
	negating.
	(get32, get32s): Use unsigned types in shift expressions.
This commit is contained in:
Alan Modra 2020-09-02 10:47:33 +09:30
parent caf4537af5
commit b4b393495f
2 changed files with 19 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2020-09-02 Alan Modra <amodra@gmail.com>
* i386-dis.c (OP_E_memory): Don't cast to signed type when
negating.
(get32, get32s): Use unsigned types in shift expressions.
2020-09-02 Alan Modra <amodra@gmail.com>
* csky-dis.c (print_insn_csky): Use unsigned type for "given".

View File

@ -11908,7 +11908,7 @@ OP_E_memory (int bytemode, int sizeflag)
{
*obufp++ = '-';
*obufp = '\0';
disp = - (bfd_signed_vma) disp;
disp = -disp;
}
if (havedisp)
@ -11996,7 +11996,7 @@ OP_E_memory (int bytemode, int sizeflag)
{
*obufp++ = '-';
*obufp = '\0';
disp = - (bfd_signed_vma) disp;
disp = -disp;
}
print_displacement (scratchbuf, disp);
@ -12198,28 +12198,28 @@ get64 (void)
static bfd_signed_vma
get32 (void)
{
bfd_signed_vma x = 0;
bfd_vma x = 0;
FETCH_DATA (the_info, codep + 4);
x = *codep++ & (bfd_signed_vma) 0xff;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
x = *codep++ & (bfd_vma) 0xff;
x |= (*codep++ & (bfd_vma) 0xff) << 8;
x |= (*codep++ & (bfd_vma) 0xff) << 16;
x |= (*codep++ & (bfd_vma) 0xff) << 24;
return x;
}
static bfd_signed_vma
get32s (void)
{
bfd_signed_vma x = 0;
bfd_vma x = 0;
FETCH_DATA (the_info, codep + 4);
x = *codep++ & (bfd_signed_vma) 0xff;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
x = *codep++ & (bfd_vma) 0xff;
x |= (*codep++ & (bfd_vma) 0xff) << 8;
x |= (*codep++ & (bfd_vma) 0xff) << 16;
x |= (*codep++ & (bfd_vma) 0xff) << 24;
x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
x = (x ^ ((bfd_vma) 1 << 31)) - ((bfd_vma) 1 << 31);
return x;
}