Turn most warnings into errors

This commit is contained in:
Michael Meissner 1996-10-10 21:26:59 +00:00
parent 778c521b85
commit f8a011cfa5
2 changed files with 122 additions and 29 deletions

View file

@ -1,3 +1,13 @@
Thu Oct 10 17:22:18 1996 Michael Meissner <meissner@tiktok.cygnus.com>
* config/tc-ppc.c (ppc_insert_operand): Change most warnings into
errors.
(ppc_elf_validate_fix): Ditto.
(md_assemble): Ditto.
(ppc_tc): Ditto.
(ppc_pe_section): Ditto.
(ppc_frob_symbol): Ditto.
Thu Oct 10 12:05:45 1996 Jeffrey A Law (law@cygnus.com)
* config/tc-mn10300.c (md_assemble): Use FMT_* macros for

View file

@ -15,8 +15,9 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
along with GAS; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include <stdio.h>
#include <ctype.h>
@ -427,28 +428,31 @@ static const struct pd_reg pre_defined_registers[] =
/* Given NAME, find the register number associated with that name, return
the integer value associated with the given name or -1 on failure. */
static int reg_name_search PARAMS ( (char * name) );
static int reg_name_search
PARAMS ((const struct pd_reg *, int, const char * name));
static int
reg_name_search (name)
char *name;
reg_name_search (regs, regcount, name)
const struct pd_reg *regs;
int regcount;
const char *name;
{
int middle, low, high;
int cmp;
low = 0;
high = REG_NAME_CNT - 1;
high = regcount - 1;
do
{
middle = (low + high) / 2;
cmp = strcasecmp (name, pre_defined_registers[middle].name);
cmp = strcasecmp (name, regs[middle].name);
if (cmp < 0)
high = middle - 1;
else if (cmp > 0)
low = middle + 1;
else
return pre_defined_registers[middle].value;
return regs[middle].value;
}
while (low <= high);
@ -485,7 +489,7 @@ register_name (expressionP)
return false;
c = get_symbol_end ();
reg_number = reg_name_search (name);
reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, name);
/* look to see if it's in the register table */
if (reg_number >= 0)
@ -507,7 +511,55 @@ register_name (expressionP)
return false;
}
}
/* This function is called for each symbol seen in an expression. It
handles the special parsing which PowerPC assemblers are supposed
to use for condition codes. */
/* Whether to do the special parsing. */
static boolean cr_operand;
/* Names to recognize in a condition code. This table is sorted. */
static const struct pd_reg cr_names[] =
{
{ "cr0", 0 },
{ "cr1", 1 },
{ "cr2", 2 },
{ "cr3", 3 },
{ "cr4", 4 },
{ "cr5", 5 },
{ "cr6", 6 },
{ "cr7", 7 },
{ "eq", 2 },
{ "gt", 1 },
{ "lt", 0 },
{ "so", 3 },
{ "un", 3 }
};
/* Parsing function. This returns non-zero if it recognized an
expression. */
int
ppc_parse_name (name, expr)
const char *name;
expressionS *expr;
{
int val;
if (! cr_operand)
return 0;
val = reg_name_search (cr_names, sizeof cr_names / sizeof cr_names[0],
name);
if (val < 0)
return 0;
expr->X_op = O_constant;
expr->X_add_number = val;
return 1;
}
/* Local variables. */
@ -994,9 +1046,9 @@ ppc_insert_operand (insn, operand, val, file, line)
sprint_value (buf, test);
if (file == (char *) NULL)
as_warn (err, buf, min, max);
as_bad (err, buf, min, max);
else
as_warn_where (file, line, err, buf, min, max);
as_bad_where (file, line, err, buf, min, max);
}
}
@ -1007,7 +1059,7 @@ ppc_insert_operand (insn, operand, val, file, line)
errmsg = NULL;
insn = (*operand->insert) (insn, (long) val, &errmsg);
if (errmsg != (const char *) NULL)
as_warn (errmsg);
as_bad (errmsg);
}
else
insn |= (((long) val & ((1 << operand->bits) - 1))
@ -1310,8 +1362,8 @@ ppc_elf_validate_fix (fixp, seg)
if ((seg->flags & (SEC_READONLY | SEC_CODE)) != 0
|| fixp->fx_r_type != BFD_RELOC_CTOR)
{
as_warn_where (fixp->fx_file, fixp->fx_line,
"Relocation cannot be done when using -mrelocatable");
as_bad_where (fixp->fx_file, fixp->fx_line,
"Relocation cannot be done when using -mrelocatable");
}
}
}
@ -1548,7 +1600,7 @@ md_assemble (str)
{
insn = (*operand->insert) (insn, 0L, &errmsg);
if (errmsg != (const char *) NULL)
as_warn (errmsg);
as_bad (errmsg);
continue;
}
@ -1561,7 +1613,7 @@ md_assemble (str)
{
insn = (*operand->insert) (insn, 0L, &errmsg);
if (errmsg != (const char *) NULL)
as_warn (errmsg);
as_bad (errmsg);
}
if ((operand->flags & PPC_OPERAND_NEXT) != 0)
next_opindex = *opindex_ptr + 1;
@ -1638,7 +1690,7 @@ md_assemble (str)
assert (ex.X_add_symbol != NULL);
if (ex.X_add_symbol->bsym->section != tocdata_section)
{
as_warn("[tocv] symbol is not a toc symbol");
as_bad("[tocv] symbol is not a toc symbol");
}
}
@ -1684,8 +1736,15 @@ md_assemble (str)
else
#endif /* TE_PE */
if (!register_name(&ex))
expression (&ex);
{
if (! register_name (&ex))
{
if ((operand->flags & PPC_OPERAND_CR) != 0)
cr_operand = true;
expression (&ex);
cr_operand = false;
}
}
str = input_line_pointer;
input_line_pointer = hold;
@ -2993,7 +3052,7 @@ ppc_tc (ignore)
label = ppc_current_csect->sy_tc.within;
if (label->sy_tc.class != XMC_TC0)
{
as_warn (".tc with no label");
as_bad (".tc with no label");
ignore_rest_of_line ();
return;
}
@ -3487,7 +3546,7 @@ ppc_pe_section (ignore)
{
/* Section Contents */
case 'a': /* unknown */
as_warn ("Unsupported section attribute -- 'a'");
as_bad ("Unsupported section attribute -- 'a'");
break;
case 'c': /* code section */
flags |= SEC_CODE;
@ -3557,8 +3616,8 @@ ppc_pe_section (ignore)
break;
default:
as_warn("unknown section attribute '%c'",
*input_line_pointer);
as_bad("unknown section attribute '%c'",
*input_line_pointer);
break;
}
++input_line_pointer;
@ -3575,9 +3634,9 @@ ppc_pe_section (ignore)
if (flags != SEC_NO_FLAGS)
{
if (! bfd_set_section_flags (stdoutput, sec, flags))
as_warn ("error setting flags for \"%s\": %s",
bfd_section_name (stdoutput, sec),
bfd_errmsg (bfd_get_error ()));
as_bad ("error setting flags for \"%s\": %s",
bfd_section_name (stdoutput, sec),
bfd_errmsg (bfd_get_error ()));
}
bfd_set_section_alignment(stdoutput, sec, align);
@ -3850,7 +3909,7 @@ ppc_frob_symbol (sym)
if (SF_GET_FUNCTION (sym))
{
if (ppc_last_function != (symbolS *) NULL)
as_warn ("two .function pseudo-ops with no intervening .ef");
as_bad ("two .function pseudo-ops with no intervening .ef");
ppc_last_function = sym;
if (sym->sy_tc.size != (symbolS *) NULL)
{
@ -3862,7 +3921,7 @@ ppc_frob_symbol (sym)
&& strcmp (S_GET_NAME (sym), ".ef") == 0)
{
if (ppc_last_function == (symbolS *) NULL)
as_warn (".ef with no preceding .function");
as_bad (".ef with no preceding .function");
else
{
set_end = ppc_last_function;
@ -4343,7 +4402,31 @@ ppc_fix_adjustable (fix)
return 0;
}
#endif
/* A reloc from one csect to another must be kept. The assembler
will, of course, keep relocs between sections, and it will keep
absolute relocs, but we need to force it to keep PC relative relocs
between two csects in the same section. */
int
ppc_force_relocation (fix)
fixS *fix;
{
/* At this point fix->fx_addsy should already have been converted to
a csect symbol. If the csect does not include the fragment, then
we need to force the relocation. */
if (fix->fx_pcrel
&& fix->fx_addsy != NULL
&& fix->fx_addsy->sy_tc.subseg != 0
&& (fix->fx_addsy->sy_frag->fr_address > fix->fx_frag->fr_address
|| (fix->fx_addsy->sy_tc.next != NULL
&& (fix->fx_addsy->sy_tc.next->sy_frag->fr_address
<= fix->fx_frag->fr_address))))
return 1;
return 0;
}
#endif /* OBJ_XCOFF */
/* See whether a symbol is in the TOC section. */