* 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 926af00d1d52bd0a177340c61c480f4ac419d07d..1c60b60c2f713b46fcd301db7a69c537f822317c 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 bcbd061f37641ed49c8ce755ea3578dc5aac0f45..6e5be65921cbbd2aad8f459282e5dff0d5213e91 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));