diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/cgen.c | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 1891d85..db3af83 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -7,6 +7,11 @@ * config/te-symbian.h: Include "te-armeabi.h". 2005-03-16 Nick Clifton <nickc@redhat.com> + + * cgen.c (gas_cgen_parse_operand): Copy opinfo parameter into a + local variable in case it is clobbered by the setjmp. + +2005-03-16 Nick Clifton <nickc@redhat.com> Ben Elliston <bje@au.ibm.com> * configure.in (werror): New switch: Add -Werror to the @@ -320,9 +320,11 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP) /* These are volatile to survive the setjmp. */ char * volatile hold; enum cgen_parse_operand_result * volatile resultP_1; + volatile int opinfo_1; #else static char *hold; static enum cgen_parse_operand_result *resultP_1; + int opinfo_1; #endif const char *errmsg; expressionS exp; @@ -336,6 +338,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP) resultP_1 = resultP; hold = input_line_pointer; input_line_pointer = (char *) *strP; + opinfo_1 = opinfo; /* We rely on md_operand to longjmp back to us. This is done via gas_cgen_md_operand. */ @@ -356,7 +359,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP) input_line_pointer = hold; #ifdef TC_CGEN_PARSE_FIX_EXP - opinfo = TC_CGEN_PARSE_FIX_EXP (opinfo, & exp); + opinfo = TC_CGEN_PARSE_FIX_EXP (opinfo_1, & exp); #endif /* FIXME: Need to check `want'. */ @@ -383,7 +386,7 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP) break; de_fault: default: - queue_fixup (opindex, opinfo, &exp); + queue_fixup (opindex, opinfo_1, &exp); *valueP = 0; *resultP = CGEN_PARSE_OPERAND_RESULT_QUEUED; break; |