From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>
Subject: [PATCH 7/9] gdb: remove VALUE_NEXT_FRAME_ID, add value::next_frame_id
Date: Thu, 21 Dec 2023 14:16:28 -0500 [thread overview]
Message-ID: <20231221191716.257256-8-simon.marchi@efficios.com> (raw)
In-Reply-To: <20231221191716.257256-1-simon.marchi@efficios.com>
Remove VALUE_NEXT_FRAME_ID, replace it with a method on struct value. Set
`m_location.reg.next_frame_id` directly from value::allocate_register_lazy,
which is fine because allocate_register_lazy is a static creation
function for struct value.
Change-Id: Ic9f0f239c166a88dccfee836f9f51871e67548e6
---
gdb/findvar.c | 2 +-
gdb/valops.c | 7 +++----
gdb/value.c | 32 ++++++++++++--------------------
gdb/value.h | 11 ++++-------
4 files changed, 20 insertions(+), 32 deletions(-)
diff --git a/gdb/findvar.c b/gdb/findvar.c
index fa014d60291d..ef7129dab331 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -779,7 +779,7 @@ read_frame_register_value (value *value)
{
gdb_assert (value->lval () == lval_register);
- frame_info_ptr next_frame = frame_find_by_id (VALUE_NEXT_FRAME_ID (value));
+ frame_info_ptr next_frame = frame_find_by_id (value->next_frame_id ());
gdb_assert (next_frame != nullptr);
gdbarch *gdbarch = frame_unwind_arch (next_frame);
diff --git a/gdb/valops.c b/gdb/valops.c
index 049314cf7db5..5a5b3f14ad44 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -1193,7 +1193,7 @@ value_assign (struct value *toval, struct value *fromval)
case lval_register:
{
- frame_info_ptr next_frame = frame_find_by_id (VALUE_NEXT_FRAME_ID (toval));
+ frame_info_ptr next_frame = frame_find_by_id (toval->next_frame_id ());
int value_reg = VALUE_REGNUM (toval);
@@ -1410,11 +1410,10 @@ address_of_variable (struct symbol *var, const struct block *b)
{
case lval_register:
{
- frame_info_ptr frame;
const char *regname;
- frame = frame_find_by_id (VALUE_NEXT_FRAME_ID (val));
- gdb_assert (frame);
+ frame_info_ptr frame = frame_find_by_id (val->next_frame_id ());
+ gdb_assert (frame != nullptr);
regname = gdbarch_register_name (get_frame_arch (frame),
VALUE_REGNUM (val));
diff --git a/gdb/value.c b/gdb/value.c
index 7d51396a0e3a..a16ba2fb5d6b 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -972,7 +972,7 @@ value::allocate_register_lazy (frame_info_ptr next_frame, int regnum,
result->set_lval (lval_register);
VALUE_REGNUM (result) = regnum;
- VALUE_NEXT_FRAME_ID (result) = get_frame_id (next_frame);
+ result->m_location.reg.next_frame_id = get_frame_id (next_frame);
return result;
}
@@ -1421,11 +1421,12 @@ value::set_address (CORE_ADDR addr)
m_location.address = addr;
}
-struct frame_id *
-value::deprecated_next_frame_id_hack ()
+frame_id
+value::next_frame_id ()
{
gdb_assert (m_lval == lval_register);
- return &m_location.reg.next_frame_id;
+
+ return m_location.reg.next_frame_id;
}
int *
@@ -3928,7 +3929,7 @@ value::fetch_lazy_memory ()
void
value::fetch_lazy_register ()
{
- frame_info_ptr next_frame;
+
int regnum;
struct type *type = check_typedef (this->type ());
struct value *new_val = this;
@@ -3941,13 +3942,12 @@ value::fetch_lazy_register ()
while (new_val->lval () == lval_register && new_val->lazy ())
{
- struct frame_id next_frame_id = VALUE_NEXT_FRAME_ID (new_val);
+ frame_id next_frame_id = new_val->next_frame_id ();
+ frame_info_ptr next_frame = frame_find_by_id (next_frame_id);
+ gdb_assert (next_frame != NULL);
- next_frame = frame_find_by_id (next_frame_id);
regnum = VALUE_REGNUM (new_val);
- gdb_assert (next_frame != NULL);
-
/* Convertible register routines are used for multi-register
values and for interpretation in different types
(e.g. float or int from a double register). Lazy
@@ -3956,12 +3956,6 @@ value::fetch_lazy_register ()
gdb_assert (!gdbarch_convert_register_p (get_frame_arch (next_frame),
regnum, type));
- /* FRAME was obtained, above, via VALUE_NEXT_FRAME_ID.
- Since a "->next" operation was performed when setting
- this field, we do not need to perform a "next" operation
- again when unwinding the register. That's why
- frame_unwind_register_value() is called here instead of
- get_frame_register_value(). */
new_val = frame_unwind_register_value (next_frame, regnum);
/* If we get another lazy lval_register value, it means the
@@ -3976,7 +3970,7 @@ value::fetch_lazy_register ()
in this situation. */
if (new_val->lval () == lval_register
&& new_val->lazy ()
- && VALUE_NEXT_FRAME_ID (new_val) == next_frame_id)
+ && new_val->next_frame_id () == next_frame_id)
internal_error (_("infinite loop while fetching a register"));
}
@@ -3994,12 +3988,10 @@ value::fetch_lazy_register ()
if (frame_debug)
{
- struct gdbarch *gdbarch;
- frame_info_ptr frame;
- frame = frame_find_by_id (VALUE_NEXT_FRAME_ID (this));
+ frame_info_ptr frame = frame_find_by_id (this->next_frame_id ());
frame = get_prev_frame_always (frame);
regnum = VALUE_REGNUM (this);
- gdbarch = get_frame_arch (frame);
+ gdbarch *gdbarch = get_frame_arch (frame);
string_file debug_file;
gdb_printf (&debug_file,
diff --git a/gdb/value.h b/gdb/value.h
index 9d7630ef07b3..c33d2d8f0cd1 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -373,7 +373,10 @@ struct value
struct internalvar **deprecated_internalvar_hack ()
{ return &m_location.internalvar; }
- struct frame_id *deprecated_next_frame_id_hack ();
+ /* Return this value's next frame id.
+
+ The value must be of lval == lval_register. */
+ frame_id next_frame_id ();
int *deprecated_regnum_hack ();
@@ -964,12 +967,6 @@ extern void error_value_optimized_out (void);
/* Pointer to internal variable. */
#define VALUE_INTERNALVAR(val) (*((val)->deprecated_internalvar_hack ()))
-/* Frame ID of "next" frame to which a register value is relative. A
- register value is indicated by VALUE_LVAL being set to lval_register.
- So, if the register value is found relative to frame F, then the
- frame id of F->next will be stored in VALUE_NEXT_FRAME_ID. */
-#define VALUE_NEXT_FRAME_ID(val) (*((val)->deprecated_next_frame_id_hack ()))
-
/* Register number if the value is from a register. */
#define VALUE_REGNUM(val) (*((val)->deprecated_regnum_hack ()))
--
2.43.0
next prev parent reply other threads:[~2023-12-21 19:18 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-21 19:16 [PATCH 0/9] Some register value cleanups Simon Marchi
2023-12-21 19:16 ` [PATCH 1/9] gdb: don't set frame id after calling cooked_read_value Simon Marchi
2023-12-21 19:16 ` [PATCH 2/9] gdb: pass frame_info_ptr to gdbarch_value_from_register Simon Marchi
2023-12-22 16:40 ` Tom Tromey
2023-12-22 16:53 ` Simon Marchi
2023-12-22 16:56 ` Tom Tromey
2023-12-21 19:16 ` [PATCH 3/9] gdb: pass non-nullptr frame to gdbarch_value_from_register in address_from_register Simon Marchi
2023-12-21 19:16 ` [PATCH 4/9] gdb: add type parameter to value::allocate_register and add value::allocate_register_lazy Simon Marchi
2023-12-21 19:16 ` [PATCH 5/9] gdb: remove read_frame_register_value's frame parameter Simon Marchi
2023-12-21 19:16 ` [PATCH 6/9] gdb: implement address_from_register using value_from_register Simon Marchi
2023-12-21 19:16 ` Simon Marchi [this message]
2023-12-22 16:51 ` [PATCH 7/9] gdb: remove VALUE_NEXT_FRAME_ID, add value::next_frame_id Tom Tromey
2023-12-22 16:56 ` Simon Marchi
2023-12-22 17:02 ` Tom Tromey
2023-12-22 17:06 ` Simon Marchi
2023-12-24 15:35 ` Simon Marchi
2023-12-21 19:16 ` [PATCH 8/9] gdb: remove VALUE_REGNUM, add value::regnum Simon Marchi
2023-12-22 16:52 ` Tom Tromey
2023-12-22 16:57 ` Simon Marchi
2023-12-21 19:16 ` [PATCH 9/9] gdb: make value::allocate_register_lazy store id of next non-inline frame Simon Marchi
2023-12-22 16:53 ` [PATCH 0/9] Some register value cleanups Tom Tromey
2023-12-22 16:58 ` Simon Marchi
2023-12-22 17:02 ` Tom Tromey
2023-12-24 18:28 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231221191716.257256-8-simon.marchi@efficios.com \
--to=simon.marchi@efficios.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox