forked from Imagelibrary/binutils-gdb
* config/tc-m68k.c: Instead of replacing -1 by 64 in assignment to
fx_pcrel_adjust explicitly sign extend when reading it.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2001-05-08 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
* config/tc-m68k.c: Instead of replacing -1 by 64 in assignment to
|
||||||
|
fx_pcrel_adjust explicitly sign extend when reading it.
|
||||||
|
|
||||||
2001-05-08 Alan Modra <amodra@one.net.au>
|
2001-05-08 Alan Modra <amodra@one.net.au>
|
||||||
|
|
||||||
* config/tc-m68k.c (md_estimate_size_before_relax): Set fr_var
|
* config/tc-m68k.c (md_estimate_size_before_relax): Set fr_var
|
||||||
|
|||||||
@@ -968,8 +968,9 @@ tc_gen_reloc (section, fixp)
|
|||||||
reloc->addend = fixp->fx_addnumber;
|
reloc->addend = fixp->fx_addnumber;
|
||||||
else
|
else
|
||||||
reloc->addend = (section->vma
|
reloc->addend = (section->vma
|
||||||
+ (fixp->fx_pcrel_adjust == 64
|
/* Explicit sign extension in case char is
|
||||||
? -1 : fixp->fx_pcrel_adjust)
|
unsigned. */
|
||||||
|
+ ((fixp->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80
|
||||||
+ fixp->fx_addnumber
|
+ fixp->fx_addnumber
|
||||||
+ md_pcrel_from (fixp));
|
+ md_pcrel_from (fixp));
|
||||||
#endif
|
#endif
|
||||||
@@ -2546,11 +2547,7 @@ m68k_ip (instring)
|
|||||||
switch (s[1])
|
switch (s[1])
|
||||||
{
|
{
|
||||||
case 'B':
|
case 'B':
|
||||||
/* The pc_fix argument winds up in fx_pcrel_adjust,
|
add_fix ('B', &opP->disp, 1, -1);
|
||||||
which is a char, and may therefore be unsigned. We
|
|
||||||
want to pass -1, but we pass 64 instead, and convert
|
|
||||||
back in md_pcrel_from. */
|
|
||||||
add_fix ('B', &opP->disp, 1, 64);
|
|
||||||
break;
|
break;
|
||||||
case 'W':
|
case 'W':
|
||||||
add_fix ('w', &opP->disp, 1, 0);
|
add_fix ('w', &opP->disp, 1, 0);
|
||||||
@@ -7041,9 +7038,9 @@ md_pcrel_from (fixP)
|
|||||||
{
|
{
|
||||||
int adjust;
|
int adjust;
|
||||||
|
|
||||||
/* Because fx_pcrel_adjust is a char, and may be unsigned, we store
|
/* Because fx_pcrel_adjust is a char, and may be unsigned, we explicitly
|
||||||
-1 as 64. */
|
sign extend the value here. */
|
||||||
adjust = fixP->fx_pcrel_adjust;
|
adjust = ((fixP->fx_pcrel_adjust & 0xff) ^ 0x80) - 0x80;
|
||||||
if (adjust == 64)
|
if (adjust == 64)
|
||||||
adjust = -1;
|
adjust = -1;
|
||||||
return fixP->fx_where + fixP->fx_frag->fr_address - adjust;
|
return fixP->fx_where + fixP->fx_frag->fr_address - adjust;
|
||||||
|
|||||||
Reference in New Issue
Block a user