* eval.c (evaluate_subexp_standard): Add handling of user
authorJoel Brobecker <brobecker@gnat.com>
Wed, 30 Jan 2008 18:46:08 +0000 (18:46 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 30 Jan 2008 18:46:08 +0000 (18:46 +0000)
        registers when in EVAL_AVOID_SIDE_EFFECTS mode.

gdb/ChangeLog
gdb/eval.c

index 926af00..1c60b60 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-30  Joel Brobecker  <brobecker@adacore.com>
+
+       * eval.c (evaluate_subexp_standard): Add handling of user
+       registers when in EVAL_AVOID_SIDE_EFFECTS mode.
+
 2008-01-30  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * eval.c (evaluate_subexp_standard): Support
index bcbd061..6e5be65 100644 (file)
@@ -512,7 +512,15 @@ evaluate_subexp_standard (struct type *expect_type,
                                          name, strlen (name));
        if (regno == -1)
          error (_("Register $%s not available."), name);
-       if (noside == EVAL_AVOID_SIDE_EFFECTS)
+
+        /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return
+           a value with the appropriate register type.  Unfortunately,
+           we don't have easy access to the type of user registers.
+           So for these registers, we fetch the register value regardless
+           of the evaluation mode.  */
+       if (noside == EVAL_AVOID_SIDE_EFFECTS
+           && regno < gdbarch_num_regs (current_gdbarch)
+              + gdbarch_num_pseudo_regs (current_gdbarch))
          val = value_zero (register_type (current_gdbarch, regno), not_lval);
        else
          val = value_of_register (regno, get_selected_frame (NULL));