diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2023-12-01 11:27:25 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2023-12-14 16:04:49 +0000 |
commit | 9fc79b423697825f7afcb4f1143edd3827711c4c (patch) | |
tree | dd9209b57792b9cc1a78ffcef2b113c2d700937a /gdb | |
parent | 534dcbcb80957fffe9d9d55b02b5c9db20002bcf (diff) | |
download | gdb-9fc79b423697825f7afcb4f1143edd3827711c4c.zip gdb-9fc79b423697825f7afcb4f1143edd3827711c4c.tar.gz gdb-9fc79b423697825f7afcb4f1143edd3827711c4c.tar.bz2 |
gdb: make get_frame_register_bytes take the next frame
Similar to the previous patches, change get_frame_register_bytes to take
the "next frame" instead of "this frame".
Change-Id: Ie8f35042bfa6e93565fcefaee71b6b3903f0fe9f
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/dwarf2/expr.c | 22 | ||||
-rw-r--r-- | gdb/frame.c | 16 | ||||
-rw-r--r-- | gdb/frame.h | 10 | ||||
-rw-r--r-- | gdb/i386-tdep.c | 8 | ||||
-rw-r--r-- | gdb/i387-tdep.c | 10 | ||||
-rw-r--r-- | gdb/ia64-tdep.c | 9 | ||||
-rw-r--r-- | gdb/m68k-tdep.c | 10 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 7 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 10 | ||||
-rw-r--r-- | gdb/valops.c | 3 |
10 files changed, 50 insertions, 55 deletions
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 7fc7b3a..c71bbb5 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -204,8 +204,9 @@ rw_pieced_value (value *v, value *from, bool check_optimized) { case DWARF_VALUE_REGISTER: { - frame_info_ptr frame = frame_find_by_id (c->frame_id); - gdbarch *arch = get_frame_arch (frame); + frame_info_ptr next_frame + = get_next_frame_sentinel_okay (frame_find_by_id (c->frame_id)); + gdbarch *arch = frame_unwind_arch (next_frame); int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno); ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum); int optim, unavail; @@ -225,9 +226,9 @@ rw_pieced_value (value *v, value *from, bool check_optimized) if (from == nullptr) { /* Read mode. */ - if (!get_frame_register_bytes (frame, gdb_regnum, - bits_to_skip / 8, - buffer, &optim, &unavail)) + if (!get_frame_register_bytes (next_frame, gdb_regnum, + bits_to_skip / 8, buffer, + &optim, &unavail)) { if (optim) { @@ -254,9 +255,9 @@ rw_pieced_value (value *v, value *from, bool check_optimized) { /* Data is copied non-byte-aligned into the register. Need some bits from original register value. */ - get_frame_register_bytes (frame, gdb_regnum, - bits_to_skip / 8, - buffer, &optim, &unavail); + get_frame_register_bytes (next_frame, gdb_regnum, + bits_to_skip / 8, buffer, &optim, + &unavail); if (optim) throw_error (OPTIMIZED_OUT_ERROR, _("Can't do read-modify-write to " @@ -272,9 +273,8 @@ rw_pieced_value (value *v, value *from, bool check_optimized) copy_bitwise (buffer.data (), bits_to_skip % 8, from_contents, offset, this_size_bits, bits_big_endian); - put_frame_register_bytes - (get_next_frame_sentinel_okay (frame), gdb_regnum, - bits_to_skip / 8, buffer); + put_frame_register_bytes (next_frame, gdb_regnum, + bits_to_skip / 8, buffer); } } break; diff --git a/gdb/frame.c b/gdb/frame.c index 982aaa6..d260e8c 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1456,12 +1456,11 @@ deprecated_frame_register_read (frame_info_ptr frame, int regnum, } bool -get_frame_register_bytes (frame_info_ptr frame, int regnum, - CORE_ADDR offset, - gdb::array_view<gdb_byte> buffer, +get_frame_register_bytes (frame_info_ptr next_frame, int regnum, + CORE_ADDR offset, gdb::array_view<gdb_byte> buffer, int *optimizedp, int *unavailablep) { - struct gdbarch *gdbarch = get_frame_arch (frame); + gdbarch *gdbarch = frame_unwind_arch (next_frame); /* Skip registers wholly inside of OFFSET. */ while (offset >= register_size (gdbarch, regnum)) @@ -1499,17 +1498,14 @@ get_frame_register_bytes (frame_info_ptr frame, int regnum, CORE_ADDR addr; int realnum; - frame_register_unwind (get_next_frame_sentinel_okay (frame), regnum, - optimizedp, unavailablep, &lval, &addr, - &realnum, buffer.data ()); + frame_register_unwind (next_frame, regnum, optimizedp, unavailablep, + &lval, &addr, &realnum, buffer.data ()); if (*optimizedp || *unavailablep) return false; } else { - struct value *value - = frame_unwind_register_value (frame_info_ptr (frame->next), - regnum); + value *value = frame_unwind_register_value (next_frame, regnum); gdb_assert (value != NULL); *optimizedp = value->optimized_out (); *unavailablep = !value->entirely_available (); diff --git a/gdb/frame.h b/gdb/frame.h index 5ce3a1b..62f53ec 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -733,11 +733,11 @@ extern bool read_frame_register_unsigned (frame_info_ptr frame, extern void put_frame_register (frame_info_ptr next_frame, int regnum, gdb::array_view<const gdb_byte> buf); -/* Read LEN bytes from one or multiple registers starting with REGNUM - in frame FRAME, starting at OFFSET, into BUF. If the register - contents are optimized out or unavailable, set *OPTIMIZEDP, - *UNAVAILABLEP accordingly. */ -extern bool get_frame_register_bytes (frame_info_ptr frame, int regnum, +/* Read LEN bytes from one or multiple registers starting with REGNUM in + NEXT_FRAME's previous frame, starting at OFFSET, into BUF. If the register + contents are optimized out or unavailable, set *OPTIMIZEDP, *UNAVAILABLEP + accordingly. */ +extern bool get_frame_register_bytes (frame_info_ptr next_frame, int regnum, CORE_ADDR offset, gdb::array_view<gdb_byte> buffer, int *optimizedp, int *unavailablep); diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 4377b62..7a13a41 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -3877,10 +3877,10 @@ i386_register_to_value (frame_info_ptr frame, int regnum, gdb_assert (regnum != -1); gdb_assert (register_size (gdbarch, regnum) == 4); - if (!get_frame_register_bytes (frame, regnum, 0, - gdb::make_array_view (to, - register_size (gdbarch, - regnum)), + auto to_view + = gdb::make_array_view (to, register_size (gdbarch, regnum)); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); + if (!get_frame_register_bytes (next_frame, regnum, 0, to_view, optimizedp, unavailablep)) return 0; diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c index 77dc5a0..ffd8303 100644 --- a/gdb/i387-tdep.c +++ b/gdb/i387-tdep.c @@ -364,11 +364,11 @@ i387_register_to_value (frame_info_ptr frame, int regnum, } /* Convert to TYPE. */ - if (!get_frame_register_bytes (frame, regnum, 0, - gdb::make_array_view (from, - register_size (gdbarch, - regnum)), - optimizedp, unavailablep)) + auto from_view + = gdb::make_array_view (from, register_size (gdbarch, regnum)); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); + if (!get_frame_register_bytes (next_frame, regnum, 0, from_view, optimizedp, + unavailablep)) return 0; target_float_convert (from, i387_ext_type (gdbarch), to, type); diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c index 3bede264..b009b46 100644 --- a/gdb/ia64-tdep.c +++ b/gdb/ia64-tdep.c @@ -1227,11 +1227,10 @@ ia64_register_to_value (frame_info_ptr frame, int regnum, gdb_byte in[IA64_FP_REGISTER_SIZE]; /* Convert to TYPE. */ - if (!get_frame_register_bytes (frame, regnum, 0, - gdb::make_array_view (in, - register_size (gdbarch, - regnum)), - optimizedp, unavailablep)) + auto in_view = gdb::make_array_view (in, register_size (gdbarch, regnum)); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); + if (!get_frame_register_bytes (next_frame, regnum, 0, in_view, optimizedp, + unavailablep)) return 0; target_float_convert (in, ia64_ext_type (gdbarch), out, valtype); diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c index 8bbfa4b..f9c734c 100644 --- a/gdb/m68k-tdep.c +++ b/gdb/m68k-tdep.c @@ -216,11 +216,11 @@ m68k_register_to_value (frame_info_ptr frame, int regnum, gdb_assert (type->code () == TYPE_CODE_FLT); /* Convert to TYPE. */ - if (!get_frame_register_bytes (frame, regnum, 0, - gdb::make_array_view (from, - register_size (gdbarch, - regnum)), - optimizedp, unavailablep)) + auto from_view + = gdb::make_array_view (from, register_size (gdbarch, regnum)); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); + if (!get_frame_register_bytes (next_frame, regnum, 0, from_view, optimizedp, + unavailablep)) return 0; target_float_convert (from, fpreg_type, to, type); diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 9c0cfed..fc3193e 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -947,17 +947,18 @@ mips_register_to_value (frame_info_ptr frame, int regnum, int *optimizedp, int *unavailablep) { struct gdbarch *gdbarch = get_frame_arch (frame); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); if (mips_convert_register_float_case_p (gdbarch, regnum, type)) { get_frame_register (frame, regnum + 0, to + 4); get_frame_register (frame, regnum + 1, to + 0); - if (!get_frame_register_bytes (frame, regnum + 0, 0, {to + 4, 4}, + if (!get_frame_register_bytes (next_frame, regnum + 0, 0, { to + 4, 4 }, optimizedp, unavailablep)) return 0; - if (!get_frame_register_bytes (frame, regnum + 1, 0, {to + 0, 4}, + if (!get_frame_register_bytes (next_frame, regnum + 1, 0, { to + 0, 4 }, optimizedp, unavailablep)) return 0; *optimizedp = *unavailablep = 0; @@ -969,7 +970,7 @@ mips_register_to_value (frame_info_ptr frame, int regnum, CORE_ADDR offset; offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 - len : 0; - if (!get_frame_register_bytes (frame, regnum, offset, {to, len}, + if (!get_frame_register_bytes (next_frame, regnum, offset, { to, len }, optimizedp, unavailablep)) return 0; diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index c430393..643997e 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -2713,11 +2713,11 @@ rs6000_register_to_value (frame_info_ptr frame, fpr to vsr. */ regnum = ieee_128_float_regnum_adjust (gdbarch, type, regnum); - if (!get_frame_register_bytes (frame, regnum, 0, - gdb::make_array_view (from, - register_size (gdbarch, - regnum)), - optimizedp, unavailablep)) + auto from_view + = gdb::make_array_view (from, register_size (gdbarch, regnum)); + frame_info_ptr next_frame = get_next_frame_sentinel_okay (frame); + if (!get_frame_register_bytes (frame, regnum, 0, from_view, optimizedp, + unavailablep)) return 0; target_float_convert (from, builtin_type (gdbarch)->builtin_double, diff --git a/gdb/valops.c b/gdb/valops.c index eb30a52..21b0106 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1227,8 +1227,7 @@ value_assign (struct value *toval, struct value *fromval) "don't fit in a %d bit word."), (int) sizeof (LONGEST) * HOST_CHAR_BIT); - if (!get_frame_register_bytes (get_prev_frame_always (next_frame), - value_reg, offset, + if (!get_frame_register_bytes (next_frame, value_reg, offset, { buffer, changed_len }, &optim, &unavail)) { |