From patchwork Thu Dec 21 19:16:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 82697 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 519383858030 for ; Thu, 21 Dec 2023 19:18:13 +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 AC0C13858030 for ; Thu, 21 Dec 2023 19:17:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AC0C13858030 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 AC0C13858030 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=1703186242; cv=none; b=RPvbc+ne9URedhHlFRoorcZvMHhByjMTm6/yuOKnEN5YPFatN9mnREoXQLcaFby2wTYWEA6+xdMIKaOzkXTqMXDKGjdGhsgrBhGzLqih/nQUdrVxkOy8d4B++Un/oVPP3AArafsn+QMCMLBVBZc12rkKMkThCjWYeV/v+hvPuVg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703186242; c=relaxed/simple; bh=MvlgLC42nZtD3NMOxHjeMjbyDnSFoT0fy8AnllG5FXM=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=x2uZQOwoPjUIn7WICtLF4XMvIULBLXlhd1xLpTpyruQPZc6vqq/ZVYpK7uwEf1t46LrRjSKA6pl8KAUR5e00NIOdQBHlkepSMKuJb/8vb8V/chQpvs8h18+Hh4j3RmtSVNkewAVucqIwfiAbgSQ8n0uZyVtY4bDSQXujfyEf53Q= 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 9B7BF1E1A8; Thu, 21 Dec 2023 14:17:19 -0500 (EST) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 6/9] gdb: implement address_from_register using value_from_register Date: Thu, 21 Dec 2023 14:16:27 -0500 Message-ID: <20231221191716.257256-7-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.5 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 As explained in the comment removed by the previous commit "gdb: pass non-nullptr frame to gdbarch_value_from_register in address_from_register", address_from_register copies some implementation bits from value_from_register: /* This routine may be called during early unwinding, at a time where the ID of FRAME is not yet known. Calling value_from_register would therefore abort in get_frame_id. However, since we only need a temporary value that is never used as lvalue, we actually do not really need to set its VALUE_NEXT_FRAME_ID. Therefore, we re-implement the core of value_from_register, but use the null_frame_id. */ This is no longer relevant, since we now create a value with a valid next frame id, so change address_from_register to use value_from_register. Change-Id: I189bd96f28735ed9f47750ffd73764c459ec6f43 --- gdb/findvar.c | 41 ++++------------------------------------- 1 file changed, 4 insertions(+), 37 deletions(-) diff --git a/gdb/findvar.c b/gdb/findvar.c index 838d850e821d..fa014d60291d 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -867,40 +867,10 @@ value_from_register (struct type *type, int regnum, frame_info_ptr frame) CORE_ADDR address_from_register (int regnum, frame_info_ptr frame) { - struct gdbarch *gdbarch = get_frame_arch (frame); - struct type *type = builtin_type (gdbarch)->builtin_data_ptr; - CORE_ADDR result; - int regnum_max_excl = gdbarch_num_cooked_regs (gdbarch); - - if (regnum < 0 || regnum >= regnum_max_excl) - error (_("Invalid register #%d, expecting 0 <= # < %d"), regnum, - regnum_max_excl); + type *type = builtin_type (get_frame_arch (frame))->builtin_data_ptr; + value_ref_ptr v = release_value (value_from_register (type, regnum, frame)); - /* Some targets require a special conversion routine even for plain - pointer types. Avoid constructing a value object in those cases. */ - if (gdbarch_convert_register_p (gdbarch, regnum, type)) - { - gdb_byte *buf = (gdb_byte *) alloca (type->length ()); - int optim, unavail, ok; - - ok = gdbarch_register_to_value (gdbarch, frame, regnum, type, - buf, &optim, &unavail); - if (!ok) - { - /* This function is used while computing a location expression. - Complain about the value being optimized out, rather than - letting value_as_address complain about some random register - the expression depends on not being saved. */ - error_value_optimized_out (); - } - - return unpack_long (type, buf); - } - - value *value = gdbarch_value_from_register (gdbarch, type, regnum, frame); - read_frame_register_value (value); - - if (value->optimized_out ()) + if (v->optimized_out ()) { /* This function is used while computing a location expression. Complain about the value being optimized out, rather than @@ -909,10 +879,7 @@ address_from_register (int regnum, frame_info_ptr frame) error_value_optimized_out (); } - result = value_as_address (value); - release_value (value); - - return result; + return value_as_address (v.get ()); } #if GDB_SELF_TEST