@@ -3449,9 +3449,8 @@ value_of_aarch64_user_reg (frame_info_ptr frame, const void *baton)
{
const int *reg_p = (const int *) baton;
- return value_of_register (*reg_p, frame);
+ return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
}
-
/* Implement the "software_single_step" gdbarch method, needed to
single step through atomic sequences on AArch64. */
@@ -9954,9 +9954,9 @@ static struct value *
value_of_arm_user_reg (frame_info_ptr frame, const void *baton)
{
const int *reg_p = (const int *) baton;
- return value_of_register (*reg_p, frame);
+ return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
}
-
+
static enum gdb_osabi
arm_elf_osabi_sniffer (bfd *abfd)
{
@@ -1134,7 +1134,8 @@ eval_op_register (struct type *expect_type, struct expression *exp,
&& regno < gdbarch_num_cooked_regs (exp->gdbarch))
val = value::zero (register_type (exp->gdbarch, regno), not_lval);
else
- val = value_of_register (regno, get_selected_frame (NULL));
+ val = value_of_register
+ (regno, get_next_frame_sentinel_okay (get_selected_frame ()));
if (val == NULL)
error (_("Value of register %s not available."), name);
else
@@ -243,42 +243,32 @@ copy_integer_to_size (gdb_byte *dest, int dest_size, const gdb_byte *source,
}
}
-/* Return a `value' with the contents of (virtual or cooked) register
- REGNUM as found in the specified FRAME. The register's type is
- determined by register_type (). */
+/* See value.h. */
-struct value *
-value_of_register (int regnum, frame_info_ptr frame)
+value *
+value_of_register (int regnum, frame_info_ptr next_frame)
{
- struct gdbarch *gdbarch = get_frame_arch (frame);
- struct value *reg_val;
+ gdbarch *gdbarch = frame_unwind_arch (next_frame);
/* User registers lie completely outside of the range of normal
registers. Catch them early so that the target never sees them. */
if (regnum >= gdbarch_num_cooked_regs (gdbarch))
- return value_of_user_reg (regnum, frame);
+ return value_of_user_reg (regnum, get_prev_frame_always (next_frame));
- reg_val = value_of_register_lazy (frame, regnum);
+ value *reg_val = value_of_register_lazy (next_frame, regnum);
reg_val->fetch_lazy ();
return reg_val;
}
-/* Return a `value' with the contents of (virtual or cooked) register
- REGNUM as found in the specified FRAME. The register's type is
- determined by register_type (). The value is not fetched. */
+/* See value.h. */
-struct value *
-value_of_register_lazy (frame_info_ptr frame, int regnum)
+value *
+value_of_register_lazy (frame_info_ptr next_frame, int regnum)
{
- struct gdbarch *gdbarch = get_frame_arch (frame);
- struct value *reg_val;
- frame_info_ptr next_frame;
+ gdbarch *gdbarch = frame_unwind_arch (next_frame);
gdb_assert (regnum < gdbarch_num_cooked_regs (gdbarch));
-
- gdb_assert (frame != NULL);
-
- next_frame = get_next_frame_sentinel_okay (frame);
+ gdb_assert (next_frame != nullptr);
/* In some cases NEXT_FRAME may not have a valid frame-id yet. This can
happen if we end up trying to unwind a register as part of the frame
@@ -291,7 +281,7 @@ value_of_register_lazy (frame_info_ptr frame, int regnum)
/* We should have a valid next frame. */
gdb_assert (frame_id_p (get_frame_id (next_frame)));
- reg_val = value::allocate_lazy (register_type (gdbarch, regnum));
+ value *reg_val = value::allocate_lazy (register_type (gdbarch, regnum));
reg_val->set_lval (lval_register);
VALUE_REGNUM (reg_val) = regnum;
VALUE_NEXT_FRAME_ID (reg_val) = get_frame_id (next_frame);
@@ -278,7 +278,8 @@ struct value *
frame_unwind_got_register (frame_info_ptr frame,
int regnum, int new_regnum)
{
- return value_of_register_lazy (frame, new_regnum);
+ return value_of_register_lazy (get_next_frame_sentinel_okay (frame),
+ new_regnum);
}
/* Return a value which indicates that FRAME saved REGNUM in memory at
@@ -835,7 +835,8 @@ gdbscm_frame_read_register (SCM self, SCM register_scm)
register_str,
strlen (register_str));
if (regnum >= 0)
- value = value_of_register (regnum, frame);
+ value = value_of_register (regnum,
+ get_next_frame_sentinel_okay (frame));
}
}
catch (const gdb_exception &ex)
@@ -2319,9 +2319,9 @@ default_print_registers_info (struct gdbarch *gdbarch,
if (*(gdbarch_register_name (gdbarch, i)) == '\0')
continue;
- default_print_one_register_info (file,
- gdbarch_register_name (gdbarch, i),
- value_of_register (i, frame));
+ default_print_one_register_info
+ (file, gdbarch_register_name (gdbarch, i),
+ value_of_register (i, get_next_frame_sentinel_okay (frame)));
}
}
@@ -392,7 +392,8 @@ loongarch_software_single_step (struct regcache *regcache)
static struct value *
value_of_loongarch_user_reg (frame_info_ptr frame, const void *baton)
{
- return value_of_register ((long long) baton, frame);
+ return value_of_register ((long long) baton,
+ get_next_frame_sentinel_okay (frame));
}
/* Implement the frame_align gdbarch method. */
@@ -1101,7 +1101,8 @@ output_register (frame_info_ptr frame, int regnum, int format,
int skip_unavailable)
{
struct ui_out *uiout = current_uiout;
- struct value *val = value_of_register (regnum, frame);
+ value *val
+ = value_of_register (regnum, get_next_frame_sentinel_okay (frame));
struct value_print_options opts;
if (skip_unavailable && !val->entirely_available ())
@@ -8074,7 +8074,7 @@ static struct value *
value_of_mips_user_reg (frame_info_ptr frame, const void *baton)
{
const int *reg_p = (const int *) baton;
- return value_of_register (*reg_p, frame);
+ return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
}
static struct gdbarch *
@@ -267,9 +267,10 @@ static const struct
static struct value *
value_of_nds32_reg (frame_info_ptr frame, const void *baton)
{
- return value_of_register ((int) (intptr_t) baton, frame);
+ return value_of_register ((int) (intptr_t) baton,
+ get_next_frame_sentinel_okay (frame));
}
-
+
/* Implement the "frame_align" gdbarch method. */
static CORE_ADDR
@@ -260,7 +260,8 @@ frapy_read_register (PyObject *self, PyObject *args, PyObject *kw)
return nullptr;
gdb_assert (regnum >= 0);
- struct value *val = value_of_register (regnum, frame);
+ value *val
+ = value_of_register (regnum, get_next_frame_sentinel_okay (frame));
if (val == NULL)
PyErr_SetString (PyExc_ValueError, _("Can't read register."));
@@ -467,8 +467,8 @@ pending_framepy_read_register (PyObject *self, PyObject *args, PyObject *kw)
which maps to a real register. In the past,
get_frame_register_value() was used here, which did not
handle the user register case. */
- struct value *val = value_of_register (regnum,
- pending_frame->frame_info);
+ value *val = value_of_register
+ (regnum, get_next_frame_sentinel_okay (pending_frame->frame_info));
if (val == NULL)
PyErr_Format (PyExc_ValueError,
"Cannot read register %d from frame.",
@@ -168,7 +168,7 @@ static struct value *
value_of_riscv_user_reg (frame_info_ptr frame, const void *baton)
{
const int *reg_p = (const int *) baton;
- return value_of_register (*reg_p, frame);
+ return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
}
/* Information about a register alias that needs to be set up for this
@@ -1149,7 +1149,7 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
try
{
- val = value_of_register (regnum, frame);
+ val = value_of_register (regnum, get_next_frame_sentinel_okay (frame));
regtype = val->type ();
}
catch (const gdb_exception_error &ex)
@@ -494,7 +494,7 @@ s12z_print_ccw_info (struct gdbarch *gdbarch,
frame_info_ptr frame,
int reg)
{
- struct value *v = value_of_register (reg, frame);
+ value *v = value_of_register (reg, get_next_frame_sentinel_okay (frame));
const char *name = gdbarch_register_name (gdbarch, reg);
uint32_t ccw = value_as_long (v);
gdb_puts (name, file);
@@ -39,7 +39,7 @@ value_of_builtin_frame_fp_reg (frame_info_ptr frame, const void *baton)
register can do so by adding "fp" to register name table (mind
you, doing this is probably a dangerous thing). */
return value_of_register (gdbarch_deprecated_fp_regnum (gdbarch),
- frame);
+ get_next_frame_sentinel_okay (frame));
else
{
struct type *data_ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
@@ -58,7 +58,8 @@ value_of_builtin_frame_pc_reg (frame_info_ptr frame, const void *baton)
struct gdbarch *gdbarch = get_frame_arch (frame);
if (gdbarch_pc_regnum (gdbarch) >= 0)
- return value_of_register (gdbarch_pc_regnum (gdbarch), frame);
+ return value_of_register (gdbarch_pc_regnum (gdbarch),
+ get_next_frame_sentinel_okay (frame));
else
{
struct type *func_ptr_type = builtin_type (gdbarch)->builtin_func_ptr;
@@ -77,7 +78,8 @@ value_of_builtin_frame_sp_reg (frame_info_ptr frame, const void *baton)
struct gdbarch *gdbarch = get_frame_arch (frame);
if (gdbarch_sp_regnum (gdbarch) >= 0)
- return value_of_register (gdbarch_sp_regnum (gdbarch), frame);
+ return value_of_register (gdbarch_sp_regnum (gdbarch),
+ get_next_frame_sentinel_okay (frame));
error (_("Standard register ``$sp'' is not available for this target"));
}
@@ -87,7 +89,8 @@ value_of_builtin_frame_ps_reg (frame_info_ptr frame, const void *baton)
struct gdbarch *gdbarch = get_frame_arch (frame);
if (gdbarch_ps_regnum (gdbarch) >= 0)
- return value_of_register (gdbarch_ps_regnum (gdbarch), frame);
+ return value_of_register (gdbarch_ps_regnum (gdbarch),
+ get_next_frame_sentinel_okay (frame));
error (_("Standard register ``$ps'' is not available for this target"));
}
@@ -1123,9 +1123,14 @@ extern struct value *value_of_variable (struct symbol *var,
extern struct value *address_of_variable (struct symbol *var,
const struct block *b);
-extern struct value *value_of_register (int regnum, frame_info_ptr frame);
+/* Return a value with the contents of register REGNUM as found in the frame
+ previous to NEXT_FRAME. */
-struct value *value_of_register_lazy (frame_info_ptr frame, int regnum);
+extern value *value_of_register (int regnum, frame_info_ptr next_frame);
+
+/* Same as the above, but the value is not fetched. */
+
+extern value *value_of_register_lazy (frame_info_ptr next_frame, int regnum);
/* Return the symbol's reading requirement. */