* 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:
Frank Ch. Eigler 2000-06-24 15:10:45 +00:00
parent 7fb283bce2
commit 680d285772
2 changed files with 13 additions and 1 deletions

View file

@ -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.

View file

@ -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.