From: Frank Ch. Eigler Date: Sat, 24 Jun 2000 15:10:45 +0000 (+0000) Subject: * cgen assembler fixes; approved by original author X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=680d2857724c14e32d8df8cec611444be27a63fe;p=binutils-gdb.git * cgen assembler fixes; approved by original author 2000-06-24 Frank Ch. Eigler * 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(). --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 4d3d4a27eb0..379302cd886 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2000-06-24 Frank Ch. Eigler + + * 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 * config/tc-h8500.c: Remove all uses of DEFUN. diff --git a/gas/cgen.c b/gas/cgen.c index e15e1b65346..1f4ea0baeb8 100644 --- a/gas/cgen.c +++ b/gas/cgen.c @@ -232,6 +232,7 @@ gas_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp) /* Used for communication between the next two procedures. */ static jmp_buf expr_jmp_buf; +static int expr_jmp_buf_p; /* Callback for cgen interface. Parse the expression at *STRP. 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. */ if (setjmp (expr_jmp_buf) != 0) { + expr_jmp_buf_p = 0; input_line_pointer = (char *) hold; * resultP_1 = CGEN_PARSE_OPERAND_RESULT_ERROR; return "illegal operand"; } + expr_jmp_buf_p = 1; expression (& exp); + expr_jmp_buf_p = 0; * strP = input_line_pointer; input_line_pointer = hold; @@ -328,7 +332,9 @@ void gas_cgen_md_operand (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.