(gas_cgen_parse_operand): Copy opinfo parameter into a local variable in case
authorNick Clifton <nickc@redhat.com>
Wed, 16 Mar 2005 18:09:04 +0000 (18:09 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 16 Mar 2005 18:09:04 +0000 (18:09 +0000)
it is clobbered by the setjmp.

gas/ChangeLog
gas/cgen.c

index 1891d85d3d97cd1d91700fa01b55ef9e72d1725a..db3af83741d41115fbb8159e85ef430112172e44 100644 (file)
@@ -6,6 +6,11 @@
        * config/te-armlinuxeabi.h (EABI_DEFAULT): Define.
        * 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>
 
index ab30778abb96c74b55cc6b030b045f373b64f3f7..ec3f6920cc80f7a8ef9baca9a6e2fe6b596e85d6 100644 (file)
@@ -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;