aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/findvar.c31
2 files changed, 7 insertions, 29 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9c4bd38..ee1e4aa 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-05 Pedro Alves <palves@redhat.com>
+
+ * findvar.c (value_of_register): Rework in terms of
+ value_of_register_lazy.
+
2013-09-05 Muhammad Bilal <mbilal@codesourcery.com>
* symfile.c (add_symbol_file_command): Remove trailing
diff --git a/gdb/findvar.c b/gdb/findvar.c
index d59bee1..25242be 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -262,14 +262,7 @@ struct value *
value_of_register (int regnum, struct frame_info *frame)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
- CORE_ADDR addr;
- int optim;
- int unavail;
struct value *reg_val;
- struct type *reg_type;
- int realnum;
- gdb_byte raw_buffer[MAX_REGISTER_SIZE];
- enum lval_type lval;
/* User registers lie completely outside of the range of normal
registers. Catch them early so that the target never sees them. */
@@ -277,28 +270,8 @@ value_of_register (int regnum, struct frame_info *frame)
+ gdbarch_num_pseudo_regs (gdbarch))
return value_of_user_reg (regnum, frame);
- frame_register (frame, regnum, &optim, &unavail,
- &lval, &addr, &realnum, raw_buffer);
-
- reg_type = register_type (gdbarch, regnum);
- if (optim)
- reg_val = allocate_optimized_out_value (reg_type);
- else
- reg_val = allocate_value (reg_type);
-
- if (!optim && !unavail)
- memcpy (value_contents_raw (reg_val), raw_buffer,
- register_size (gdbarch, regnum));
- else
- memset (value_contents_raw (reg_val), 0,
- register_size (gdbarch, regnum));
-
- VALUE_LVAL (reg_val) = lval;
- set_value_address (reg_val, addr);
- VALUE_REGNUM (reg_val) = regnum;
- if (unavail)
- mark_value_bytes_unavailable (reg_val, 0, register_size (gdbarch, regnum));
- VALUE_FRAME_ID (reg_val) = get_frame_id (frame);
+ reg_val = value_of_register_lazy (frame, regnum);
+ value_fetch_lazy (reg_val);
return reg_val;
}