* config/tc-m68k.c (md_apply_fix_2): Use offsetT and addressT instead of long

and unsigned long.
(md_apply_fix): Cast value before passing it.
This commit is contained in:
Ken Raeburn 1994-12-20 20:23:41 +00:00
parent d675782a06
commit 9ad5755f7b
2 changed files with 60 additions and 33 deletions

View file

@ -1,5 +1,9 @@
Tue Dec 20 14:56:31 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
* config/tc-m68k.c (md_apply_fix_2): Use offsetT and addressT
instead of long and unsigned long.
(md_apply_fix): Cast value before passing it.
* config/obj-aout.h, config/obj-coff.c, config/obj-elf.h,
config/obj-som.h, config/tc-h8500.c, config/tc-hppa.c,
config/tc-hppa.h, config/tc-sh.c, config/tc-z8k.c: Don't rely on

View file

@ -74,6 +74,9 @@ const int md_reloc_size = 8; /* Size of relocation record */
references. */
int flag_want_pic;
static int flag_short_refs; /* -l option */
static int flag_long_jumps; /* -S option */
#ifdef REGISTER_PREFIX_OPTIONAL
int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
#else
@ -1554,7 +1557,7 @@ main ()
printf ("Iadd: '%.*s'", 1 + thark.e_iadd - thark.b_iadd, thark.b_iadd);
printf ("\n");
}
exit (0);
exit (EXIT_SUCCESS);
}
#endif
@ -1862,7 +1865,7 @@ m68k_ip (instring)
} /* if not address register indirect */
break;
case 'B': /* FOO */
if (opP->mode != ABSL || (flagseen['S'] && instring[0] == 'j'
if (opP->mode != ABSL || (flag_long_jumps && instring[0] == 'j'
&& instring[1] == 'b'
&& instring[2] == 's'
&& instring[3] == 'r'))
@ -1903,7 +1906,7 @@ m68k_ip (instring)
losing++;
else
{
enum _register *rp;
const enum _register *rp;
for (rp = control_regs; *rp; rp++)
if (*rp == opP->reg)
break;
@ -2321,7 +2324,7 @@ m68k_ip (instring)
if (!issword (nextword)
|| (isvar (opP->con1)
&& ((opP->con1->e_siz == 0
&& flagseen['l'] == 0)
&& flag_short_refs == 0)
|| opP->con1->e_siz == 3)))
{
@ -2563,7 +2566,7 @@ m68k_ip (instring)
&& seg (opP->con1) == text_section
&& now_seg == text_section
&& cpu_of_arch (current_architecture) >= m68020
&& !flagseen['S']
&& !flag_long_jumps
&& !strchr ("~%&$?", s[0]))
{
tmpreg = 0x3A; /* 7.2 */
@ -2844,6 +2847,9 @@ m68k_ip (instring)
case DTT1:
tmpreg = 0x007;
break;
case BUSCR:
tmpreg = 0x008;
break;
case USP:
tmpreg = 0x800;
@ -2869,6 +2875,9 @@ m68k_ip (instring)
case SRP:
tmpreg = 0x807;
break;
case PCR:
tmpreg = 0x808;
break;
default:
as_fatal ("failed sanity check.");
}
@ -3541,6 +3550,8 @@ static const struct init_entry init_table[] =
{ "tc", TC },
{ "srp", SRP },
{ "urp", URP },
{ "buscr", BUSCR },
{ "pcr", PCR },
{ "ac", AC },
{ "bc", BC },
@ -4048,19 +4059,21 @@ md_number_to_chars (buf, val, n)
static void
md_apply_fix_2 (fixP, val)
fixS *fixP;
long val;
offsetT val;
{
unsigned long upper_limit;
long lower_limit;
addressT upper_limit;
offsetT lower_limit;
#ifdef IBM_COMPILER_SUX
/* This is unnecessary but it convinces the native rs6000
compiler to generate the code we want. */
/* This is unnecessary but it convinces the native rs6000 compiler
to generate the code we want. */
char *buf = fixP->fx_frag->fr_literal;
buf += fixP->fx_where;
#else /* IBM_COMPILER_SUX */
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
#endif /* IBM_COMPILER_SUX */
/* end ibm compiler workaround */
if (val & 0x80000000)
val |= ~(addressT)0x7fffffff;
else
val &= 0x7fffffff;
switch (fixP->fx_size)
{
@ -4081,7 +4094,7 @@ md_apply_fix_2 (fixP, val)
*buf++ = (val >> 8);
*buf++ = val;
upper_limit = 0x7fffffff;
lower_limit = -0x80000000;
lower_limit = -(offsetT)0x80000000;
break;
default:
BAD_CASE (fixP->fx_size);
@ -4094,7 +4107,8 @@ md_apply_fix_2 (fixP, val)
if (!fixP->fx_pcrel)
upper_limit = upper_limit * 2 + 1;
if ((unsigned) val > upper_limit && (val > 0 || val < lower_limit))
if ((addressT) val > upper_limit
&& (val > 0 || val < lower_limit))
as_bad_where (fixP->fx_file, fixP->fx_line, "value out of range");
/* A one byte PC-relative reloc means a short branch. We can't use
@ -4114,7 +4128,7 @@ md_apply_fix (fixP, valp)
fixS *fixP;
long *valp;
{
md_apply_fix_2 (fixP, *valp);
md_apply_fix_2 (fixP, (addressT) *valp);
return 1;
}
#else
@ -4122,7 +4136,7 @@ void md_apply_fix (fixP, val)
fixS *fixP;
long val;
{
md_apply_fix_2 (fixP, val);
md_apply_fix_2 (fixP, (addressT) val);
}
#endif
@ -4140,17 +4154,12 @@ md_convert_frag_1 (fragP)
/* Address in object code of the displacement. */
register int object_address = fragP->fr_fix + fragP->fr_address;
#ifdef IBM_COMPILER_SUX
/* This is wrong but it convinces the native rs6000 compiler to
generate the code we want. */
/* Address in gas core of the place to store the displacement. */
/* This convinces the native rs6000 compiler to generate the code we
want. */
register char *buffer_address = fragP->fr_literal;
buffer_address += fragP->fr_fix;
#else /* IBM_COMPILER_SUX */
/* Address in gas core of the place to store the displacement. */
register char *buffer_address = fragP->fr_fix + fragP->fr_literal;
#endif /* IBM_COMPILER_SUX */
/* No longer true: know(fragP->fr_symbol); */
/* end ibm compiler workaround */
/* The displacement of the address, from current location. */
disp = fragP->fr_symbol ? S_GET_VALUE (fragP->fr_symbol) : 0;
@ -4397,7 +4406,7 @@ md_estimate_size_before_relax (fragP, segment)
case TAB (FBRANCH, SZ_UNDEF):
{
if (S_GET_SEGMENT (fragP->fr_symbol) == segment || flagseen['l'])
if (S_GET_SEGMENT (fragP->fr_symbol) == segment || flag_short_refs)
{
fragP->fr_subtype = TAB (FBRANCH, SHORT);
fragP->fr_var += 2;
@ -4412,7 +4421,7 @@ md_estimate_size_before_relax (fragP, segment)
case TAB (PCREL, SZ_UNDEF):
{
if (S_GET_SEGMENT (fragP->fr_symbol) == segment || flagseen['l'])
if (S_GET_SEGMENT (fragP->fr_symbol) == segment || flag_short_refs)
{
fragP->fr_subtype = TAB (PCREL, SHORT);
fragP->fr_var += 2;
@ -4436,7 +4445,7 @@ md_estimate_size_before_relax (fragP, segment)
/* only Bcc 68000 instructions can come here */
/* change bcc into b!cc/jmp absl long */
fragP->fr_opcode[0] ^= 0x01; /* invert bcc */
if (flagseen['l'])
if (flag_short_refs)
{
fragP->fr_opcode[1] = 0x04; /* branch offset = 6 */
/* JF: these were fr_opcode[2,3] */
@ -4479,7 +4488,7 @@ md_estimate_size_before_relax (fragP, segment)
buffer_address[1] = 0x04;
buffer_address[2] = 0x60; /* put in bra pc + ... */
if (flagseen['l'])
if (flag_short_refs)
{
/* JF: these were fr_opcode[5-7] */
buffer_address[3] = 0x04; /* plus 4 */
@ -4510,7 +4519,7 @@ md_estimate_size_before_relax (fragP, segment)
case TAB (PCLEA, SZ_UNDEF):
{
if ((S_GET_SEGMENT (fragP->fr_symbol)) == segment || flagseen['l'])
if ((S_GET_SEGMENT (fragP->fr_symbol)) == segment || flag_short_refs)
{
fragP->fr_subtype = TAB (PCLEA, SHORT);
fragP->fr_var += 2;
@ -4977,10 +4986,12 @@ md_parse_option (c, arg)
{
case 'l': /* -l means keep external to 2 bit offset
rather than 16 bit one */
flag_short_refs = 1;
break;
case 'S': /* -S means that jbsr's always turn into
jsr's. */
flag_long_jumps = 1;
break;
case 'A':
@ -4995,36 +5006,44 @@ md_parse_option (c, arg)
|| !strcmp (arg, "68008")
|| !strcmp (arg, "68302"))
{
current_architecture &=~ m68000up;
current_architecture |= m68000;
}
else if (!strcmp (arg, "68010"))
{
current_architecture &=~ m68000up;
current_architecture |= m68010;
}
else if (!strcmp (arg, "68020"))
{
current_architecture &=~ m68000up;
current_architecture |= m68020 | MAYBE_FLOAT_TOO;
}
else if (!strcmp (arg, "68030"))
{
current_architecture &=~ m68000up;
current_architecture |= m68030 | MAYBE_FLOAT_TOO;
}
else if (!strcmp (arg, "68040"))
{
current_architecture &=~ m68000up;
current_architecture |= m68040 | MAYBE_FLOAT_TOO;
}
else if (!strcmp (arg, "68060"))
{
current_architecture &=~ m68000up;
current_architecture |= m68060 | MAYBE_FLOAT_TOO;
}
#ifndef NO_68881
else if (!strcmp (arg, "68881"))
{
current_architecture |= m68881;
no_68881 = 0;
}
else if (!strcmp (arg, "68882"))
{
current_architecture |= m68882;
no_68881 = 0;
}
#endif /* NO_68881 */
/* Even if we aren't configured to support the processor,
@ -5039,6 +5058,7 @@ md_parse_option (c, arg)
else if (!strcmp (arg, "68851"))
{
current_architecture |= m68851;
no_68851 = 0;
}
#endif /* NO_68851 */
else if (!strcmp (arg, "no-68851"))
@ -5051,6 +5071,7 @@ md_parse_option (c, arg)
|| !strcmp (arg, "68333")
|| !strcmp (arg, "68340"))
{
current_architecture &=~ m68000up;
current_architecture |= cpu32;
}
else
@ -5229,8 +5250,10 @@ md_pcrel_from (fixP)
}
#ifndef BFD_ASSEMBLER
/*ARGSUSED*/
void
tc_coff_symbol_emit_hook ()
tc_coff_symbol_emit_hook (ignore)
symbolS *ignore;
{
}