* expression.h (enum exp_opcode): Document a register name for
authorDaniel Jacobowitz <drow@false.org>
Wed, 13 Jun 2007 17:11:09 +0000 (17:11 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 13 Jun 2007 17:11:09 +0000 (17:11 +0000)
OP_REGISTER.
* parse.c (write_dollar_variable): Write the register name for
OP_REGISTER.
(operator_length_standard): Expect the register name following
OP_REGISTER.
* ada-lang.c (resolve_subexp): Likewise.
* ax-gdb.c (gen_expr): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* expprint.c (print_subexp_standard, dump_subexp_body_standard):
Likewise.
* tracepoint.c (encode_actions): Likewise.

gdb/ChangeLog
gdb/ada-lang.c
gdb/ax-gdb.c
gdb/eval.c
gdb/expprint.c
gdb/expression.h
gdb/parse.c
gdb/tracepoint.c

index f2a365a2d289aefcf624d843570e9d4215099b19..0b9d3bf5b99cf2e9d09c0af2fdc416f79c4bb990 100644 (file)
@@ -1,3 +1,18 @@
+2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * expression.h (enum exp_opcode): Document a register name for
+       OP_REGISTER.
+       * parse.c (write_dollar_variable): Write the register name for
+       OP_REGISTER.
+       (operator_length_standard): Expect the register name following
+       OP_REGISTER.
+       * ada-lang.c (resolve_subexp): Likewise.
+       * ax-gdb.c (gen_expr): Likewise.
+       * eval.c (evaluate_subexp_standard): Likewise.
+       * expprint.c (print_subexp_standard, dump_subexp_body_standard):
+       Likewise.
+       * tracepoint.c (encode_actions): Likewise.
+
 2007-06-13  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * utils.c (set_screen_size): Use INT_MAX for default columns.
index 26eb64561a6912fe747bd63df02d811c235068aa..068a6ed7fc871615c96ee704436be3d0048e7014 100644 (file)
@@ -2710,7 +2710,6 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
     case OP_TYPE:
     case OP_BOOL:
     case OP_LAST:
-    case OP_REGISTER:
     case OP_INTERNALVAR:
       *pos += 3;
       break;
@@ -2720,6 +2719,10 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
       nargs = 1;
       break;
 
+    case OP_REGISTER:
+      *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
+      break;
+
     case STRUCTOP_STRUCT:
       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
       nargs = 1;
index b00806fd0b7a90509c2327cf4b3c4ff16b17fef2..82e095367aabc64f9996f8120cec32cd8265e65c 100644 (file)
@@ -1599,8 +1599,14 @@ gen_expr (union exp_element **pc, struct agent_expr *ax,
 
     case OP_REGISTER:
       {
-       int reg = (int) (*pc)[1].longconst;
-       (*pc) += 3;
+       const char *name = &(*pc)[2].string;
+       int reg;
+       (*pc) += 4 + BYTES_TO_EXP_ELEM ((*pc)[1].longconst + 1);
+       reg = frame_map_name_to_regnum (deprecated_safe_get_selected_frame (),
+                                       name, strlen (name));
+       if (reg == -1)
+         internal_error (__FILE__, __LINE__,
+                         _("Register $%s not available"), name);
        value->kind = axs_lvalue_register;
        value->u.reg = reg;
        value->type = register_type (current_gdbarch, reg);
index 75cea6b5bbd13278a3662dc2f310b122084ea4f9..4222495b55e7c9b6abec76426f7e7a59cf29edad 100644 (file)
@@ -500,16 +500,21 @@ evaluate_subexp_standard (struct type *expect_type,
 
     case OP_REGISTER:
       {
-       int regno = longest_to_int (exp->elts[pc + 1].longconst);
+       const char *name = &exp->elts[pc + 2].string;
+       int regno;
        struct value *val;
-       (*pos) += 2;
+
+       (*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;
       }
index dc1f7f764fe904c194a7e7e434c7d75efc6e24c3..09d2efe1676ac85ede44bde354a29442ab5d0bbe 100644 (file)
@@ -130,10 +130,8 @@ print_subexp_standard (struct expression *exp, int *pos,
 
     case OP_REGISTER:
       {
-       int regnum = longest_to_int (exp->elts[pc + 1].longconst);
-       const char *name = user_reg_map_regnum_to_name (current_gdbarch,
-                                                       regnum);
-       (*pos) += 2;
+       const char *name = &exp->elts[pc + 2].string;
+       (*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
        fprintf_filtered (stream, "$%s", name);
        return;
       }
@@ -965,9 +963,8 @@ dump_subexp_body_standard (struct expression *exp,
       elt += 2;
       break;
     case OP_REGISTER:
-      fprintf_filtered (stream, "Register %ld",
-                       (long) exp->elts[elt].longconst);
-      elt += 2;
+      fprintf_filtered (stream, "Register $%s", &exp->elts[elt + 1].string);
+      elt += 3 + BYTES_TO_EXP_ELEM (exp->elts[elt].longconst + 1);
       break;
     case OP_INTERNALVAR:
       fprintf_filtered (stream, "Internal var @");
index fecf69f587b950deb97313bb905c13c9ae1162ae..bc1fa3b25a107c9832ab577e782e61a91f376820 100644 (file)
@@ -166,9 +166,8 @@ enum exp_opcode
        With another OP_LAST at the end, this makes three exp_elements.  */
     OP_LAST,
 
-    /* OP_REGISTER is followed by an integer in the next exp_element.
-       This is the number of a register to fetch (as an int).
-       With another OP_REGISTER at the end, this makes three exp_elements.  */
+    /* OP_REGISTER is followed by a string in the next exp_element.
+       This is the name of a register to fetch.  */
     OP_REGISTER,
 
     /* OP_INTERNALVAR is followed by an internalvar ptr in the next exp_element.
index 3284af3cdfb677f84cd3b24ccfa9cb645a612d6c..0c7dfd852ee59c66490b762c31b3a0e094d6e23a 100644 (file)
@@ -548,7 +548,9 @@ handle_last:
   return;
 handle_register:
   write_exp_elt_opcode (OP_REGISTER);
-  write_exp_elt_longcst (i);
+  str.length--;
+  str.ptr++;
+  write_exp_string (str);
   write_exp_elt_opcode (OP_REGISTER);
   return;
 }
@@ -717,7 +719,6 @@ operator_length_standard (struct expression *expr, int endpos,
     case OP_TYPE:
     case OP_BOOL:
     case OP_LAST:
-    case OP_REGISTER:
     case OP_INTERNALVAR:
       oplen = 3;
       break;
@@ -772,6 +773,7 @@ operator_length_standard (struct expression *expr, int endpos,
     case STRUCTOP_PTR:
       args = 1;
       /* fall through */
+    case OP_REGISTER:
     case OP_M2_STRING:
     case OP_STRING:
     case OP_OBJC_NSSTRING:     /* Objective C Foundation Class NSString constant */
index ff5c6b7b456f9cc98b048221cc3775503ba08cbf..02d2e80b7678f20a5ba1acf134bab8747d0cfa0a 100644 (file)
@@ -1602,11 +1602,20 @@ encode_actions (struct tracepoint *t, char ***tdp_actions,
                  switch (exp->elts[0].opcode)
                    {
                    case OP_REGISTER:
-                     i = exp->elts[1].longconst;
-                     if (info_verbose)
-                       printf_filtered ("OP_REGISTER: ");
-                     add_register (collect, i);
-                     break;
+                     {
+                       const char *name = &exp->elts[2].string;
+
+                       i = frame_map_name_to_regnum (deprecated_safe_get_selected_frame (),
+                                                     name, strlen (name));
+                       if (i == -1)
+                         internal_error (__FILE__, __LINE__,
+                                         _("Register $%s not available"),
+                                         name);
+                       if (info_verbose)
+                         printf_filtered ("OP_REGISTER: ");
+                       add_register (collect, i);
+                       break;
+                     }
 
                    case UNOP_MEMVAL:
                      /* safe because we know it's a simple expression */