From patchwork Thu Dec 21 19:16:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 82696 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A44C2384DB53 for ; Thu, 21 Dec 2023 19:18:12 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 78274385C424 for ; Thu, 21 Dec 2023 19:17:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 78274385C424 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 78274385C424 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703186241; cv=none; b=ML3O9h7u3CsYJuxxKvF23tVemuKUzAtnfxjpA8kp+m7PUyxiWQLcnI9LI0Oxd1s3JiPwIGF+duKmWfV3DvpXr9WPA0XFIfH+0oshrAseI57cn9d+1m3oqOgPpS7Eq6EhZwr2F+Tr7BFaL9zCeqKXqmrgunM9xZtllVhSkNSruZ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703186241; c=relaxed/simple; bh=JYciyubDr5KFeawYFL5japaxTNo1pA8XrGgqiHZbzYs=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=SvTY+klcOmRPV1aalHKpnCDMe099q3sV9dvBy2skVIinDL3ALzfUYWYz7uwCQ8GfpgdcpICJcxrWJHO1zkk9AGBxWbtpdfPvVMN1UjxJrT0jM1cWfBkXKI8EgFUOyYwtMHKQSd2f1KfwqZ9YJDXstT5FUeBDjs9pT00SaEh9k6o= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from smarchi-efficios.internal.efficios.com (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id B16041E1A9; Thu, 21 Dec 2023 14:17:19 -0500 (EST) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 7/9] gdb: remove VALUE_NEXT_FRAME_ID, add value::next_frame_id Date: Thu, 21 Dec 2023 14:16:28 -0500 Message-ID: <20231221191716.257256-8-simon.marchi@efficios.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231221191716.257256-1-simon.marchi@efficios.com> References: <20231221191716.257256-1-simon.marchi@efficios.com> MIME-Version: 1.0 X-Spam-Status: No, score=-3496.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_SOFTFAIL, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org 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 ()))