summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2007-06-13 17:11:09 +0000
committerDaniel Jacobowitz <dan@debian.org>2007-06-13 17:11:09 +0000
commit3342abff4d17f23376cf9e594c08d28ef47e0968 (patch)
treecbaa250948dc1719135fd5d13ca1831b3892b918 /gdb
parent3e1f43c886b2b160c498d8c9094bff2ca03d8035 (diff)
downloadgdb-3342abff4d17f23376cf9e594c08d28ef47e0968.tar.gz
* 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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog15
-rw-r--r--gdb/ada-lang.c5
-rw-r--r--gdb/ax-gdb.c10
-rw-r--r--gdb/eval.c13
-rw-r--r--gdb/expprint.c11
-rw-r--r--gdb/expression.h5
-rw-r--r--gdb/parse.c6
-rw-r--r--gdb/tracepoint.c19
8 files changed, 60 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f2a365a2d28..0b9d3bf5b99 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,20 @@
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.
2007-06-13 Ulrich Weigand <uweigand@de.ibm.com>
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 26eb64561a6..068a6ed7fc8 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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;
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index b00806fd0b7..82e095367aa 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -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);
diff --git a/gdb/eval.c b/gdb/eval.c
index 75cea6b5bbd..4222495b55e 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -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;
}
diff --git a/gdb/expprint.c b/gdb/expprint.c
index dc1f7f764fe..09d2efe1676 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -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 @");
diff --git a/gdb/expression.h b/gdb/expression.h
index fecf69f587b..bc1fa3b25a1 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -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.
diff --git a/gdb/parse.c b/gdb/parse.c
index 3284af3cdfb..0c7dfd852ee 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -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 */
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index ff5c6b7b456..02d2e80b767 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -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 */