Merge libitm changes to configure.ac from gcc master.
[deliverable/binutils-gdb.git] / gdb / eval.c
index 22ca8819f341b36a25e68f4fe3471c7948561593..5d758d1ad078b4cd5f9a9065687c57cdb7429457 100644 (file)
@@ -860,6 +860,27 @@ evaluate_subexp_standard (struct type *expect_type,
        return ret;
       }
 
+    case OP_VAR_ENTRY_VALUE:
+      (*pos) += 2;
+      if (noside == EVAL_SKIP)
+       goto nosideret;
+
+      {
+       struct symbol *sym = exp->elts[pc + 1].symbol;
+       struct frame_info *frame;
+
+       if (noside == EVAL_AVOID_SIDE_EFFECTS)
+         return value_zero (SYMBOL_TYPE (sym), not_lval);
+
+       if (SYMBOL_CLASS (sym) != LOC_COMPUTED
+           || SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
+         error (_("Symbol \"%s\" does not have any specific entry value"),
+                SYMBOL_PRINT_NAME (sym));
+
+       frame = get_selected_frame (NULL);
+       return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
+      }
+
     case OP_LAST:
       (*pos) += 2;
       return
@@ -1653,13 +1674,7 @@ evaluate_subexp_standard (struct type *expect_type,
           func_name = (char *) alloca (name_len + 1);
           strcpy (func_name, &exp->elts[string_pc + 1].string);
 
-          /* Prepare list of argument types for overload resolution.  */
-          arg_types = (struct type **)
-           alloca (nargs * (sizeof (struct type *)));
-          for (ix = 1; ix <= nargs; ix++)
-            arg_types[ix - 1] = value_type (argvec[ix]);
-
-          find_overload_match (arg_types, nargs, func_name,
+          find_overload_match (&argvec[1], nargs, func_name,
                                NON_METHOD, /* not method */
                               0,          /* strict match */
                                NULL, NULL, /* pass NULL symbol since
@@ -1695,13 +1710,7 @@ evaluate_subexp_standard (struct type *expect_type,
                 evaluation.  */
              struct value *valp = NULL;
 
-             /* Prepare list of argument types for overload resolution.  */
-             arg_types = (struct type **)
-               alloca (nargs * (sizeof (struct type *)));
-             for (ix = 1; ix <= nargs; ix++)
-               arg_types[ix - 1] = value_type (argvec[ix]);
-
-             (void) find_overload_match (arg_types, nargs, tstr,
+             (void) find_overload_match (&argvec[1], nargs, tstr,
                                          METHOD, /* method */
                                          0,      /* strict match */
                                          &arg2,  /* the object */
@@ -1772,13 +1781,7 @@ evaluate_subexp_standard (struct type *expect_type,
              if (op == OP_VAR_VALUE)
                function = exp->elts[save_pos1+2].symbol;
 
-             /* Prepare list of argument types for overload resolution.  */
-             arg_types = (struct type **)
-               alloca (nargs * (sizeof (struct type *)));
-             for (ix = 1; ix <= nargs; ix++)
-               arg_types[ix - 1] = value_type (argvec[ix]);
-
-             (void) find_overload_match (arg_types, nargs,
+             (void) find_overload_match (&argvec[1], nargs,
                                          NULL,        /* no need for name */
                                          NON_METHOD,  /* not method */
                                          0,           /* strict match */
@@ -2198,7 +2201,7 @@ evaluate_subexp_standard (struct type *expect_type,
            {
              struct value *v_one, *retval;
 
-             v_one = value_one (value_type (arg2), not_lval);
+             v_one = value_one (value_type (arg2));
              binop_promote (exp->language_defn, exp->gdbarch, &arg1, &v_one);
              retval = value_binop (arg1, v_one, op);
              return retval;
@@ -2742,7 +2745,7 @@ evaluate_subexp_standard (struct type *expect_type,
            {
              struct value *tmp = arg1;
 
-             arg2 = value_one (value_type (arg1), not_lval);
+             arg2 = value_one (value_type (arg1));
              binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
              arg2 = value_binop (tmp, arg2, BINOP_ADD);
            }
@@ -2766,7 +2769,7 @@ evaluate_subexp_standard (struct type *expect_type,
            {
              struct value *tmp = arg1;
 
-             arg2 = value_one (value_type (arg1), not_lval);
+             arg2 = value_one (value_type (arg1));
              binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
              arg2 = value_binop (tmp, arg2, BINOP_SUB);
            }
@@ -2792,7 +2795,7 @@ evaluate_subexp_standard (struct type *expect_type,
            {
              struct value *tmp = arg1;
 
-             arg2 = value_one (value_type (arg1), not_lval);
+             arg2 = value_one (value_type (arg1));
              binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
              arg2 = value_binop (tmp, arg2, BINOP_ADD);
            }
@@ -2819,7 +2822,7 @@ evaluate_subexp_standard (struct type *expect_type,
            {
              struct value *tmp = arg1;
 
-             arg2 = value_one (value_type (arg1), not_lval);
+             arg2 = value_one (value_type (arg1));
              binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
              arg2 = value_binop (tmp, arg2, BINOP_SUB);
            }
@@ -2830,7 +2833,7 @@ evaluate_subexp_standard (struct type *expect_type,
 
     case OP_THIS:
       (*pos) += 1;
-      return value_of_local (exp->language_defn->la_name_of_this, 1);
+      return value_of_this (exp->language_defn);
 
     case OP_TYPE:
       /* The value is not supposed to be used.  This is here to make it
This page took 0.025232 seconds and 4 git commands to generate.