* cgen assembler fixes; approved by original author <devans>
2000-06-24 Frank Ch. Eigler <fche@redhat.com> * cgen.c (expr_jmp_buf_p): New validity flag for expr_jmp_buf. (gas_cgen_parse_operand): Set it around expression() call. (gas_cgen_md_operand): Test for it before longjmp().
This commit is contained in:
parent
7fb283bce2
commit
680d285772
2 changed files with 13 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2000-06-24 Frank Ch. Eigler <fche@redhat.com>
|
||||||
|
|
||||||
|
* cgen.c (expr_jmp_buf_p): New validity flag for expr_jmp_buf.
|
||||||
|
(gas_cgen_parse_operand): Set it around expression() call.
|
||||||
|
(gas_cgen_md_operand): Test for it before longjmp().
|
||||||
|
|
||||||
2000-06-24 Kazu Hirata <kazu@hxi.com>
|
2000-06-24 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
* config/tc-h8500.c: Remove all uses of DEFUN.
|
* config/tc-h8500.c: Remove all uses of DEFUN.
|
||||||
|
|
|
@ -232,6 +232,7 @@ gas_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
|
||||||
|
|
||||||
/* Used for communication between the next two procedures. */
|
/* Used for communication between the next two procedures. */
|
||||||
static jmp_buf expr_jmp_buf;
|
static jmp_buf expr_jmp_buf;
|
||||||
|
static int expr_jmp_buf_p;
|
||||||
|
|
||||||
/* Callback for cgen interface. Parse the expression at *STRP.
|
/* Callback for cgen interface. Parse the expression at *STRP.
|
||||||
The result is an error message or NULL for success (in which case
|
The result is an error message or NULL for success (in which case
|
||||||
|
@ -279,12 +280,15 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP)
|
||||||
This is done via gas_cgen_md_operand. */
|
This is done via gas_cgen_md_operand. */
|
||||||
if (setjmp (expr_jmp_buf) != 0)
|
if (setjmp (expr_jmp_buf) != 0)
|
||||||
{
|
{
|
||||||
|
expr_jmp_buf_p = 0;
|
||||||
input_line_pointer = (char *) hold;
|
input_line_pointer = (char *) hold;
|
||||||
* resultP_1 = CGEN_PARSE_OPERAND_RESULT_ERROR;
|
* resultP_1 = CGEN_PARSE_OPERAND_RESULT_ERROR;
|
||||||
return "illegal operand";
|
return "illegal operand";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_jmp_buf_p = 1;
|
||||||
expression (& exp);
|
expression (& exp);
|
||||||
|
expr_jmp_buf_p = 0;
|
||||||
|
|
||||||
* strP = input_line_pointer;
|
* strP = input_line_pointer;
|
||||||
input_line_pointer = hold;
|
input_line_pointer = hold;
|
||||||
|
@ -328,7 +332,9 @@ void
|
||||||
gas_cgen_md_operand (expressionP)
|
gas_cgen_md_operand (expressionP)
|
||||||
expressionS * expressionP;
|
expressionS * expressionP;
|
||||||
{
|
{
|
||||||
longjmp (expr_jmp_buf, 1);
|
/* Don't longjmp if we're not called from within cgen_parse_operand(). */
|
||||||
|
if (expr_jmp_buf_p)
|
||||||
|
longjmp (expr_jmp_buf, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish assembling instruction INSN.
|
/* Finish assembling instruction INSN.
|
||||||
|
|
Loading…
Reference in a new issue