mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
* read.c (emit_expr): Check for overflow of a negative value
correctly. * write.c (fixup_segment): Likewise. * config/obj-coff.c (fixup_segment): Likewise. PR 11411.
This commit is contained in:
@ -1,5 +1,10 @@
|
|||||||
Thu Jan 9 09:08:43 1997 Ian Lance Taylor <ian@cygnus.com>
|
Thu Jan 9 09:08:43 1997 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* read.c (emit_expr): Check for overflow of a negative value
|
||||||
|
correctly.
|
||||||
|
* write.c (fixup_segment): Likewise.
|
||||||
|
* config/obj-coff.c (fixup_segment): Likewise.
|
||||||
|
|
||||||
* config/tc-m68k.c (struct label_line): Define.
|
* config/tc-m68k.c (struct label_line): Define.
|
||||||
(labels, current_label): New static variables.
|
(labels, current_label): New static variables.
|
||||||
(md_assemble): Mark current_label as text, and clear it.
|
(md_assemble): Mark current_label as text, and clear it.
|
||||||
|
19
gas/read.c
19
gas/read.c
@ -3198,14 +3198,25 @@ emit_expr (exp, nbytes)
|
|||||||
register valueT get;
|
register valueT get;
|
||||||
register valueT use;
|
register valueT use;
|
||||||
register valueT mask;
|
register valueT mask;
|
||||||
|
valueT hibit;
|
||||||
register valueT unmask;
|
register valueT unmask;
|
||||||
|
|
||||||
/* JF << of >= number of bits in the object is undefined. In
|
/* JF << of >= number of bits in the object is undefined. In
|
||||||
particular SPARC (Sun 4) has problems */
|
particular SPARC (Sun 4) has problems */
|
||||||
if (nbytes >= sizeof (valueT))
|
if (nbytes >= sizeof (valueT))
|
||||||
mask = 0;
|
{
|
||||||
|
mask = 0;
|
||||||
|
if (nbytes > sizeof (valueT))
|
||||||
|
hibit = 0;
|
||||||
|
else
|
||||||
|
hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes); /* Don't store these bits. */
|
{
|
||||||
|
/* Don't store these bits. */
|
||||||
|
mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes);
|
||||||
|
hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
|
||||||
|
}
|
||||||
|
|
||||||
unmask = ~mask; /* Do store these bits. */
|
unmask = ~mask; /* Do store these bits. */
|
||||||
|
|
||||||
@ -3216,7 +3227,9 @@ emit_expr (exp, nbytes)
|
|||||||
|
|
||||||
get = exp->X_add_number;
|
get = exp->X_add_number;
|
||||||
use = get & unmask;
|
use = get & unmask;
|
||||||
if ((get & mask) != 0 && (get & mask) != mask)
|
if ((get & mask) != 0
|
||||||
|
&& ((get & mask) != mask
|
||||||
|
|| (get & hibit) == 0))
|
||||||
{ /* Leading bits contain both 0s & 1s. */
|
{ /* Leading bits contain both 0s & 1s. */
|
||||||
as_warn ("Value 0x%lx truncated to 0x%lx.",
|
as_warn ("Value 0x%lx truncated to 0x%lx.",
|
||||||
(unsigned long) get, (unsigned long) use);
|
(unsigned long) get, (unsigned long) use);
|
||||||
|
Reference in New Issue
Block a user