From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id AIb/M1F4gmcUqgoAWB0awg (envelope-from ) for ; Sat, 11 Jan 2025 08:55:29 -0500 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=XDzXxbYq; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=DdEuslJ5; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=NpLN8r6k; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=JOfXtb1o; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id CEA3C1E0C0; Sat, 11 Jan 2025 08:55:29 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 ESMTPS id E78591E05C for ; Sat, 11 Jan 2025 08:55:28 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 626943858C48 for ; Sat, 11 Jan 2025 13:55:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 626943858C48 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=XDzXxbYq; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=DdEuslJ5; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=NpLN8r6k; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=JOfXtb1o Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id 182C03858C48 for ; Sat, 11 Jan 2025 13:54:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 182C03858C48 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 182C03858C48 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736603695; cv=none; b=FpUHNAAC9SFdup7l9stXaDsmYPFF9iTrbc5GPjFCMVFGmTn894JJD17e5+WzuDrv3SZfh+Q+L79c+5Eutug2TZyI8L4JnrgBjWUTcRZMFq6laCRIdDvIU3YfIDwgnkuXo+sf6KmqAjLYqizlVchg3na4f0wj7M7i0b18MSDIcj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736603695; c=relaxed/simple; bh=avjuGPMHfUDhyDw3Bwob8rtKIAnY+10ZP8ccEjkgCqU=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature: Message-ID:Date:MIME-Version:Subject:To:From; b=PLy7F+w9mpoAaWHcRBR6bcb0q3GUBTilm3t5Tn4iaeFbInhyrYBU6smwEeVcQEhtor4x91Pteds6JH1KDdTj/9tICuxee+BVO6MIPBCQeaNgwFY/0zxwQR1QHNc81tnNwbnSPNNjOC2YN5ZxV0SxwqrwP/j7eFeAIO66V5YjePA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 182C03858C48 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id EE14421172; Sat, 11 Jan 2025 13:54:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1736603694; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZTi0WSJm+dbWbh3c/eOqXxNtp5LBMutRJAxNDmgHQuw=; b=XDzXxbYqNcybSqcK1rhg2wvlZXwCwKOESyS13VoCQugKML50fk2uXSTF80ZW0x3a5+mQX/ 90nOOGmJ5Vb0R53Fk127WwCH7CmpKlfWmY3d7LUyf4WnpSd7hvRW8nwSdDU3YcfME0SQe4 Nujyqh5TN48NUtbkEjehbSFYCNLZyXE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1736603694; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZTi0WSJm+dbWbh3c/eOqXxNtp5LBMutRJAxNDmgHQuw=; b=DdEuslJ5cIgRZk6+Wrfh4CNw2QY+3Q89ZCExrzqVtIa4/8a5pTahqTpByrojjUXb3bJU0u 1YUc1GdlBW8Rg6AA== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1736603693; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZTi0WSJm+dbWbh3c/eOqXxNtp5LBMutRJAxNDmgHQuw=; b=NpLN8r6kYpG5hI4aqsRcnc7eKaaWCHI7k6MSiCt+SNTf0YVuutwO+mLTxfqPVW5HUAeoUf ZdE02n7DUmVGOEy/HC9XW4/TyXRpxqAxNp33wRBhfKEKZDIJ7vksdJxDdti5U2DDVPfPk1 tUXmpmwPxK9mb/wCUNLFKLARx+maNbU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1736603693; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZTi0WSJm+dbWbh3c/eOqXxNtp5LBMutRJAxNDmgHQuw=; b=JOfXtb1oISRljILA37ESKxEM6pyWU/xXp/uVR/4kofTt4JmvjgSkOXZ2966GHxl57NOvQ/ o4HqNwO1tGFU80CA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id BB01B13763; Sat, 11 Jan 2025 13:54:53 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id U6XlKy14gmeRWQAAD6G6ig (envelope-from ); Sat, 11 Jan 2025 13:54:53 +0000 Message-ID: <347ca2f6-aa4a-4f08-8675-a8f0bce65e93@suse.de> Date: Sat, 11 Jan 2025 14:54:40 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] GDB: Use gdb::array_view for buffers used in register reading and unwinding To: Thiago Jung Bauermann , Simon Marchi Cc: gdb-patches@sourceware.org, "Aktemur, Tankut Baris" , "Maciej W. Rozycki" References: <20250110164430.3376697-1-thiago.bauermann@linaro.org> <20250110164430.3376697-3-thiago.bauermann@linaro.org> <321e71e0-43de-4604-bb7e-34f6f64b83bf@simark.ca> <871pxa9udr.fsf@linaro.org> Content-Language: en-US From: Tom de Vries In-Reply-To: <871pxa9udr.fsf@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spamd-Result: default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; RCVD_TLS_ALL(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_FIVE(0.00)[5]; FROM_EQ_ENVFROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid] 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~public-inbox=simark.ca@sourceware.org On 1/10/25 23:28, Thiago Jung Bauermann wrote: > + gdb_assert (buffer.size () >= value->type ()->length ()); > + This causes a regression on s390x-linux for test-case gdb.base/return.exp: ... (gdb) PASS: gdb.base/return.exp: continue to return of -5 return 5^M Make func2 return now? (y or n) y^M /home/vries/gdb/src/gdb/frame.c:1207: internal-error: frame_register_unwind: Assertion `buffer.size () >= value->type ()->length ()' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M ----- Backtrace -----^M FAIL: gdb.base/return.exp: return value 5 (GDB internal error) ... Before the commit, the test-case produces a fail, but doesn't assert: ... (gdb) PASS: gdb.base/return.exp: continue to return of -5 return 5^M Make func2 return now? (y or n) y^M value has been optimized out^M (gdb) FAIL: gdb.base/return.exp: return value 5 ... Concretely, we're trying to read machine register r11, which according to the CFI is saved in dwarf register 16: ... DW_CFA_register: r11 in r16 (f0) ... Dwarf register 16 corresponds to f0 / v0 according to the ABI, and since v0 is available, v0 is picked by s390_dwarf_reg_to_regnum. The assert then fails because the buffer that should hold the value of 8 byte register r11: ... (gdb) p buffer.size () $1 = 8 ... is smaller than the size of register v0: ... (gdb) p value->type ()->length () $2 = 16 ... Removing the assert reverts back to previous behaviour. Properly fixing this requires us to only look at the part that is relevant, copying the value from there, and checking for optimized out and unavailable only there. This worked for s390x-linux: ... diff --git a/gdb/frame.c b/gdb/frame.c index 10a32dcd896..02583857019 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1193,8 +1193,14 @@ frame_register_unwind (const frame_info_ptr &next_frame, int regnum, gdb_assert (value != NULL); - *optimizedp = value->optimized_out (); - *unavailablep = !value->entirely_available (); + if (value->lazy ()) + value->fetch_lazy (); + + *optimizedp + = value->bits_any_optimized_out (value->offset () * 8, + buffer.size () * 8); + *unavailablep + = !value->bytes_available (value->offset (), buffer.size ()); *lvalp = value->lval (); *addrp = value->address (); if (*lvalp == lval_register) @@ -1204,13 +1210,17 @@ frame_register_unwind (const frame_info_ptr &next_frame, int regnum, if (!buffer.empty ()) { - gdb_assert (buffer.size () >= value->type ()->length ()); + gdb_assert (buffer.size () + <= value->type ()->length () - value->offset ()); if (!*optimizedp && !*unavailablep) - memcpy (buffer.data (), value->contents_all ().data (), - value->type ()->length ()); + { + auto value_part + = value->contents_all ().slice (value->offset (), buffer.size ()); + memcpy (buffer.data (), value_part.data (), buffer.size ()); + } else - memset (buffer.data (), 0, value->type ()->length ()); + memset (buffer.data (), 0, buffer.size ()); } /* Dispose of the new value. This prevents watchpoints from ... Thanks, - Tom