Fix an overflow checking bug uncovered when a 32 bit target is compiled
with a 64 bit bfd.
This commit is contained in:
parent
25ef477f61
commit
b77ad1d4c9
@ -1,3 +1,10 @@
|
||||
1999-07-29 Alan Modra <alan@spri.levels.unisa.edu.au>
|
||||
|
||||
* write.c (fixup_segment): Fix generic error check overflow test.
|
||||
|
||||
* config/tc-i386.c (pe): Change %d to %ld, %x to %lx, and cast
|
||||
X_add_number to long.
|
||||
|
||||
Wed Jul 28 02:04:24 1999 "Jerry Quinn" <jquinn@nortelnetworks.com>
|
||||
|
||||
* config/tc-hppa.c (pa_ip): Add 'J' and 'K' code
|
||||
|
@ -777,8 +777,8 @@ pe (e)
|
||||
expressionS *e;
|
||||
{
|
||||
fprintf (stdout, " operation %d\n", e->X_op);
|
||||
fprintf (stdout, " add_number %d (%x)\n",
|
||||
e->X_add_number, e->X_add_number);
|
||||
fprintf (stdout, " add_number %ld (%lx)\n",
|
||||
(long) e->X_add_number, (long) e->X_add_number);
|
||||
if (e->X_add_symbol)
|
||||
{
|
||||
fprintf (stdout, " add_symbol ");
|
||||
|
20
gas/write.c
20
gas/write.c
@ -2733,24 +2733,12 @@ fixup_segment (fixP, this_segment_type)
|
||||
{
|
||||
if ((size_t) size < sizeof (valueT))
|
||||
{
|
||||
valueT mask, hibit;
|
||||
valueT mask;
|
||||
|
||||
/* set all bits to one */
|
||||
mask = 0;
|
||||
mask--;
|
||||
/* Technically, combining these produces an undefined result
|
||||
if size is sizeof (valueT), though I think these two
|
||||
half-way operations should both be defined. And the
|
||||
compiler should be able to combine them if it's valid on
|
||||
the host architecture. */
|
||||
mask <<= size * 4;
|
||||
mask <<= size * 4;
|
||||
hibit = (valueT) 1 << (size * 8 - 1);
|
||||
if (((add_number & mask) != 0
|
||||
|| (fixP->fx_signed
|
||||
&& (add_number & hibit) != 0))
|
||||
&& ((add_number & mask) != mask
|
||||
|| (add_number & hibit) == 0))
|
||||
mask--; /* set all bits to one */
|
||||
mask <<= size * 8 - (fixP->fx_signed ? 1 : 0);
|
||||
if ((add_number & mask) != 0 && (add_number & mask) != mask)
|
||||
{
|
||||
char buf[50], buf2[50];
|
||||
sprint_value (buf, fragP->fr_address + where);
|
||||
|
Loading…
x
Reference in New Issue
Block a user