mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
Set error instead of err_msg on failure.
2010-03-21 H.J. Lu <hongjiu.lu@intel.com> * config/tc-i386.c (i386_error): New. (_i386_insn): Replace err_msg with error. (operand_size_match): Set error instead of err_msg on failure. (operand_type_match): Likewise. (operand_type_register_match): Likewise. (VEX_check_operands): Likewise. (match_template): Likewise. Use error instead of err_msg with as_bad.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2010-03-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* config/tc-i386.c (i386_error): New.
|
||||||
|
(_i386_insn): Replace err_msg with error.
|
||||||
|
(operand_size_match): Set error instead of err_msg on failure.
|
||||||
|
(operand_type_match): Likewise.
|
||||||
|
(operand_type_register_match): Likewise.
|
||||||
|
(VEX_check_operands): Likewise.
|
||||||
|
(match_template): Likewise. Use error instead of err_msg with
|
||||||
|
as_bad.
|
||||||
|
|
||||||
2010-03-19 Jie Zhang <jie@codesourcery.com>
|
2010-03-19 Jie Zhang <jie@codesourcery.com>
|
||||||
|
|
||||||
* config/tc-arm.c (make_mapping_symbol): Hanle the case
|
* config/tc-arm.c (make_mapping_symbol): Hanle the case
|
||||||
|
@ -204,6 +204,20 @@ union i386_op
|
|||||||
const reg_entry *regs;
|
const reg_entry *regs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum i386_error
|
||||||
|
{
|
||||||
|
oprand_size_mismatch,
|
||||||
|
operand_type_mismatch,
|
||||||
|
register_type_mismatch,
|
||||||
|
number_of_operands_mismatch,
|
||||||
|
invalid_instruction_suffix,
|
||||||
|
bad_imm4,
|
||||||
|
old_gcc_only,
|
||||||
|
unsupported_with_intel_mnemonic,
|
||||||
|
unsupported_syntax,
|
||||||
|
unsupported
|
||||||
|
};
|
||||||
|
|
||||||
struct _i386_insn
|
struct _i386_insn
|
||||||
{
|
{
|
||||||
/* TM holds the template for the insn were currently assembling. */
|
/* TM holds the template for the insn were currently assembling. */
|
||||||
@ -262,7 +276,7 @@ struct _i386_insn
|
|||||||
unsigned int swap_operand;
|
unsigned int swap_operand;
|
||||||
|
|
||||||
/* Error message. */
|
/* Error message. */
|
||||||
const char *err_msg;
|
enum i386_error error;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _i386_insn i386_insn;
|
typedef struct _i386_insn i386_insn;
|
||||||
@ -1565,7 +1579,7 @@ operand_size_match (const insn_template *t)
|
|||||||
else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
|
else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
|
||||||
{
|
{
|
||||||
mismatch:
|
mismatch:
|
||||||
i.err_msg = _("operand size mismatch");
|
i.error = oprand_size_mismatch;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1611,7 +1625,7 @@ operand_type_match (i386_operand_type overlap,
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
mismatch:
|
mismatch:
|
||||||
i.err_msg = _("operand type mismatch");
|
i.error = operand_type_mismatch;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1661,7 +1675,7 @@ operand_type_register_match (i386_operand_type m0,
|
|||||||
&& !(t0.bitfield.reg64 & t1.bitfield.reg64))
|
&& !(t0.bitfield.reg64 & t1.bitfield.reg64))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
i.err_msg = _("register type mismatch");
|
i.error = register_type_mismatch;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3758,7 +3772,7 @@ VEX_check_operands (const insn_template *t)
|
|||||||
if (i.op[0].imms->X_op != O_constant
|
if (i.op[0].imms->X_op != O_constant
|
||||||
|| !fits_in_imm4 (i.op[0].imms->X_add_number))
|
|| !fits_in_imm4 (i.op[0].imms->X_add_number))
|
||||||
{
|
{
|
||||||
i.err_msg = _("Imm4 isn't the first operand");
|
i.error = bad_imm4;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3810,35 +3824,35 @@ match_template (void)
|
|||||||
addr_prefix_disp = -1;
|
addr_prefix_disp = -1;
|
||||||
|
|
||||||
/* Must have right number of operands. */
|
/* Must have right number of operands. */
|
||||||
i.err_msg = _("number of operands mismatch");
|
i.error = number_of_operands_mismatch;
|
||||||
if (i.operands != t->operands)
|
if (i.operands != t->operands)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check processor support. */
|
/* Check processor support. */
|
||||||
i.err_msg = _("unsupported");
|
i.error = unsupported;
|
||||||
found_cpu_match = (cpu_flags_match (t)
|
found_cpu_match = (cpu_flags_match (t)
|
||||||
== CPU_FLAGS_PERFECT_MATCH);
|
== CPU_FLAGS_PERFECT_MATCH);
|
||||||
if (!found_cpu_match)
|
if (!found_cpu_match)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check old gcc support. */
|
/* Check old gcc support. */
|
||||||
i.err_msg = _("only supported with old gcc");
|
i.error = old_gcc_only;
|
||||||
if (!old_gcc && t->opcode_modifier.oldgcc)
|
if (!old_gcc && t->opcode_modifier.oldgcc)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check AT&T mnemonic. */
|
/* Check AT&T mnemonic. */
|
||||||
i.err_msg = _("unsupported with Intel mnemonic");
|
i.error = unsupported_with_intel_mnemonic;
|
||||||
if (intel_mnemonic && t->opcode_modifier.attmnemonic)
|
if (intel_mnemonic && t->opcode_modifier.attmnemonic)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check AT&T/Intel syntax. */
|
/* Check AT&T/Intel syntax. */
|
||||||
i.err_msg = _("unsupported syntax");
|
i.error = unsupported_syntax;
|
||||||
if ((intel_syntax && t->opcode_modifier.attsyntax)
|
if ((intel_syntax && t->opcode_modifier.attsyntax)
|
||||||
|| (!intel_syntax && t->opcode_modifier.intelsyntax))
|
|| (!intel_syntax && t->opcode_modifier.intelsyntax))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check the suffix, except for some instructions in intel mode. */
|
/* Check the suffix, except for some instructions in intel mode. */
|
||||||
i.err_msg = _("invalid instruction suffix");
|
i.error = invalid_instruction_suffix;
|
||||||
if ((!intel_syntax || !t->opcode_modifier.ignoresize)
|
if ((!intel_syntax || !t->opcode_modifier.ignoresize)
|
||||||
&& ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
|
&& ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
|
||||||
|| (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
|
|| (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
|
||||||
@ -4090,7 +4104,43 @@ check_reverse:
|
|||||||
if (t == current_templates->end)
|
if (t == current_templates->end)
|
||||||
{
|
{
|
||||||
/* We found no match. */
|
/* We found no match. */
|
||||||
as_bad (_("%s for `%s'"), i.err_msg,
|
const char *err_msg;
|
||||||
|
switch (i.error)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
case oprand_size_mismatch:
|
||||||
|
err_msg = _("operand size mismatch");
|
||||||
|
break;
|
||||||
|
case operand_type_mismatch:
|
||||||
|
err_msg = _("operand type mismatch");
|
||||||
|
break;
|
||||||
|
case register_type_mismatch:
|
||||||
|
err_msg = _("register type mismatch");
|
||||||
|
break;
|
||||||
|
case number_of_operands_mismatch:
|
||||||
|
err_msg = _("number of operands mismatch");
|
||||||
|
break;
|
||||||
|
case invalid_instruction_suffix:
|
||||||
|
err_msg = _("invalid instruction suffix");
|
||||||
|
break;
|
||||||
|
case bad_imm4:
|
||||||
|
err_msg = _("Imm4 isn't the first operand");
|
||||||
|
break;
|
||||||
|
case old_gcc_only:
|
||||||
|
err_msg = _("only supported with old gcc");
|
||||||
|
break;
|
||||||
|
case unsupported_with_intel_mnemonic:
|
||||||
|
err_msg = _("unsupported with Intel mnemonic");
|
||||||
|
break;
|
||||||
|
case unsupported_syntax:
|
||||||
|
err_msg = _("unsupported syntax");
|
||||||
|
break;
|
||||||
|
case unsupported:
|
||||||
|
err_msg = _("unsupported");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
as_bad (_("%s for `%s'"), err_msg,
|
||||||
current_templates->start->name);
|
current_templates->start->name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user