2007-07-02 Markus Deuling <deuling@de.ibm.com>
[deliverable/binutils-gdb.git] / gdb / eval.c
index 5d1dc735d4eb7c296b1a5e7f2b6a79fddb233500..4222495b55e7c9b6abec76426f7e7a59cf29edad 100644 (file)
@@ -39,6 +39,7 @@
 #include "cp-support.h"
 #include "ui-out.h"
 #include "exceptions.h"
+#include "regcache.h"
 
 #include "gdb_assert.h"
 
@@ -499,12 +500,21 @@ evaluate_subexp_standard (struct type *expect_type,
 
     case OP_REGISTER:
       {
-       int regno = longest_to_int (exp->elts[pc + 1].longconst);
-       struct value *val = value_of_register (regno, get_selected_frame (NULL));
-       (*pos) += 2;
+       const char *name = &exp->elts[pc + 2].string;
+       int regno;
+       struct value *val;
+
+       (*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
+       regno = frame_map_name_to_regnum (deprecated_safe_get_selected_frame (),
+                                         name, strlen (name));
+       if (regno == -1)
+         error (_("Register $%s not available."), name);
+       if (noside == EVAL_AVOID_SIDE_EFFECTS)
+         val = value_zero (register_type (current_gdbarch, regno), not_lval);
+       else
+         val = value_of_register (regno, get_selected_frame (NULL));
        if (val == NULL)
-         error (_("Value of register %s not available."),
-                frame_map_regnum_to_name (get_selected_frame (NULL), regno));
+         error (_("Value of register %s not available."), name);
        else
          return val;
       }
@@ -1017,14 +1027,6 @@ evaluate_subexp_standard (struct type *expect_type,
       argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 3));
       if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
        {
-         /* 1997-08-01 Currently we do not support function invocation
-            via pointers-to-methods with HP aCC. Pointer does not point
-            to the function, but possibly to some thunk. */
-         if (deprecated_hp_som_som_object_present)
-           {
-             error (_("Not implemented: function invocation through pointer to method with HP aCC"));
-           }
-
          nargs++;
          /* First, evaluate the structure into arg2 */
          pc2 = (*pos)++;
@@ -1410,14 +1412,6 @@ evaluate_subexp_standard (struct type *expect_type,
       switch (TYPE_CODE (type))
        {
        case TYPE_CODE_METHODPTR:
-         if (deprecated_hp_som_som_object_present)
-           {
-             /* With HP aCC, pointers to methods do not point to the
-                function code.  */
-             /* 1997-08-19 */
-             error (_("Pointers to methods not supported with HP aCC"));
-           }
-
          if (noside == EVAL_AVOID_SIDE_EFFECTS)
            return value_zero (TYPE_TARGET_TYPE (type), not_lval);
          else
@@ -1433,14 +1427,6 @@ evaluate_subexp_standard (struct type *expect_type,
                             arg1);
 
          mem_offset = value_as_long (arg2);
-         if (deprecated_hp_som_som_object_present)
-           {
-             /* HP aCC generates offsets that have bit #29 set; turn it off to get
-                a real offset to the member. */
-             if (!mem_offset)  /* no bias -> really null */
-               error (_("Attempted dereference of null pointer-to-member"));
-             mem_offset &= ~0x20000000;
-           }
 
          arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
                                     value_as_long (arg1) + mem_offset);
@@ -1464,24 +1450,6 @@ evaluate_subexp_standard (struct type *expect_type,
       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
 
-      /* Do special stuff for HP aCC pointers to members */
-      if (deprecated_hp_som_som_object_present)
-       {
-         /* 1997-08-19 Can't assign HP aCC pointers to methods. No details of
-            the implementation yet; but the pointer appears to point to a code
-            sequence (thunk) in memory -- in any case it is *not* the address
-            of the function as it would be in a naive implementation. */
-         if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_METHODPTR)
-           error (_("Assignment to pointers to methods not implemented with HP aCC"));
-
-         /* HP aCC pointers to data members require a constant bias.  */
-         if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_MEMBERPTR)
-           {
-             unsigned int *ptr = (unsigned int *) value_contents (arg2);       /* forces evaluation */
-             *ptr |= 0x20000000;       /* set 29th bit */
-           }
-       }
-
       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
        return arg1;
       if (binop_user_defined_p (op, arg1, arg2))
@@ -1973,13 +1941,6 @@ evaluate_subexp_standard (struct type *expect_type,
       else
        {
          struct value *retvalp = evaluate_subexp_for_address (exp, pos, noside);
-         /* If HP aCC object, use bias for pointers to members */
-         if (deprecated_hp_som_som_object_present
-             && TYPE_CODE (value_type (retvalp)) == TYPE_CODE_MEMBERPTR)
-           {
-             unsigned int *ptr = (unsigned int *) value_contents (retvalp);    /* forces evaluation */
-             *ptr |= 0x20000000;       /* set 29th bit */
-           }
          return retvalp;
        }
 
This page took 0.026224 seconds and 4 git commands to generate.