* config/tc-z8k.c (INSERT): Remove, not used anywhere.

(md_apply_fix3): Make relative branches out of range an error
	instead of a warning.  Display correct line number for out of
	range branches/calls/memory accesses.
This commit is contained in:
Christian Groessler
2005-01-27 21:08:14 +00:00
parent 79dd2d2463
commit f87a1e0cb2
2 changed files with 28 additions and 16 deletions

View File

@ -1,3 +1,10 @@
2005-01-27 Christian Groessler <chris@groessler.org>
* config/tc-z8k.c (INSERT): Remove, not used anywhere.
(md_apply_fix3): Make relative branches out of range an error
instead of a warning. Display correct line number for out of
range branches/calls/memory accesses.
2005-01-27 Nathan Sidwell <nathan@codesourcery.com>
* dwarf2dbg.c (dwarf2_finish): Correct logic for determining when

View File

@ -1,6 +1,6 @@
/* tc-z8k.c -- Assemble code for the Zilog Z800n
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2003,
2005 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@ -995,8 +995,6 @@ apply_fix (char *ptr, int type, expressionS *operand, int size)
/* Now we know what sort of opcodes it is. Let's build the bytes. */
#define INSERT(x,y) *x++ = y>>24; *x++ = y>> 16; *x++=y>>8; *x++ =y;
static void
build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSED)
{
@ -1432,13 +1430,15 @@ md_apply_fix3 (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
}
else
{
if (val & 1)
as_bad (_("cannot branch to odd address"));
val /= 2;
if (val > 127 || val < -128)
as_warn (_("relative jump out of range"));
*buf++ = val;
fixP->fx_no_overflow = 1;
if (val & 1)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("cannot branch to odd address"));
val /= 2;
if (val > 127 || val < -128)
as_warn_where (fixP->fx_file, fixP->fx_line,
_("relative jump out of range"));
*buf++ = val;
fixP->fx_no_overflow = 1;
fixP->fx_done = 1;
}
break;
@ -1452,10 +1452,12 @@ md_apply_fix3 (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
else
{
if (val & 1)
as_bad (_("cannot branch to odd address"));
as_bad_where (fixP->fx_file, fixP->fx_line,
_("cannot branch to odd address"));
val /= 2;
if (val > 0 || val < -127)
as_bad (_("relative jump out of range"));
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative jump out of range"));
*buf = (*buf & 0x80) | (-val & 0x7f);
fixP->fx_no_overflow = 1;
fixP->fx_done = 1;
@ -1471,9 +1473,11 @@ md_apply_fix3 (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
else
{
if (val & 1)
as_bad (_("cannot branch to odd address"));
as_bad_where (fixP->fx_file, fixP->fx_line,
_("cannot branch to odd address"));
if (val > 4096 || val < -4095)
as_bad (_("relative call out of range"));
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative call out of range"));
val = -val / 2;
*buf = (*buf & 0xf0) | ((val >> 8) & 0xf);
buf++;
@ -1502,7 +1506,8 @@ md_apply_fix3 (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
case R_REL16:
val = val - fixP->fx_frag->fr_address + fixP->fx_where - fixP->fx_size;
if (val > 32767 || val < -32768)
as_bad (_("relative address out of range"));
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative address out of range"));
*buf++ = (val >> 8);
*buf++ = val;
fixP->fx_no_overflow = 1;