From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id x266Bfp1EmhvLA4AWB0awg (envelope-from ) for ; Wed, 30 Apr 2025 15:11:54 -0400 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=FqCpL8E0; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=EHpweEbz; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=FqCpL8E0; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=EHpweEbz; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 07F9A1E10E; Wed, 30 Apr 2025 15:11:54 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) 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,WEIRD_PORT autolearn=ham autolearn_force=no version=4.0.1 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 04BE31E089 for ; Wed, 30 Apr 2025 15:11:53 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 95AC13858CDB for ; Wed, 30 Apr 2025 19:11:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 95AC13858CDB 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=FqCpL8E0; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=EHpweEbz; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=FqCpL8E0; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=EHpweEbz Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 43C4F3858CD9 for ; Wed, 30 Apr 2025 19:11:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 43C4F3858CD9 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 43C4F3858CD9 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1746040280; cv=none; b=xhwDKC8AAGAfZis6xu3+jktjQVpgiPcDFGY2KkQpccReMqmpxwif1MGRuWsvrRb8kVraHj1YYRCjN1UMbvAh5Db1jBTs4m+fX8qiRjbLSbron6jGEFuL6lu0M1HMoakZYUiPzD+jXtI3W/ZUWrFwgPSfsP7uv/AM6v2O6AnpQcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1746040280; c=relaxed/simple; bh=PGIJaD+TeM5y4xhyvSCCXGo3fJM5JbzytM0c4kn72P0=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature: Message-ID:Date:MIME-Version:Subject:From:To; b=n3PAzj+pxj/tZl5FbTrg1dFVQ7fTBU+BXz9P17Lx0GW6+3ucnpIlmRVPv0LGPRZqZqYJH9GhTMmrJFf5/1q7xr80l1jgp7TKVfmQmSp1V6sARpr4ujGmNEaduNE5CkAanAorYrSCHXY4YM7aME7hnc5JXjJJWb1n7TqgSSu7QJs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 43C4F3858CD9 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-out2.suse.de (Postfix) with ESMTPS id 5837A1F38A; Wed, 30 Apr 2025 19:11:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1746040279; 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=DnA+t6cLno4FBFtVMwM8kEs55amdvNYSSqaLtvP44rA=; b=FqCpL8E0vhIeY1U/OmuYDt2bvJPvUHr5lpmMZJV2Q9lykKpwbHgqpmdEdgvniTWAzmwhCi wB+RrCYOmhz01GgMtxFRtWO499QwR1cFVd3jvEH7LfHON2YR+yBcNQdh0TJVAMZu9xpBdX Biwhty4LV5Go+UPR4YB/t+n6q62AQwo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1746040279; 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=DnA+t6cLno4FBFtVMwM8kEs55amdvNYSSqaLtvP44rA=; b=EHpweEbz7yyhGLts/Pkezxh328U8EIbi2gScSuXDypJ8POXue2lAPtLwOcqG5GZmp9ohvx XCPxSexhFYOMjWAw== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1746040279; 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=DnA+t6cLno4FBFtVMwM8kEs55amdvNYSSqaLtvP44rA=; b=FqCpL8E0vhIeY1U/OmuYDt2bvJPvUHr5lpmMZJV2Q9lykKpwbHgqpmdEdgvniTWAzmwhCi wB+RrCYOmhz01GgMtxFRtWO499QwR1cFVd3jvEH7LfHON2YR+yBcNQdh0TJVAMZu9xpBdX Biwhty4LV5Go+UPR4YB/t+n6q62AQwo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1746040279; 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=DnA+t6cLno4FBFtVMwM8kEs55amdvNYSSqaLtvP44rA=; b=EHpweEbz7yyhGLts/Pkezxh328U8EIbi2gScSuXDypJ8POXue2lAPtLwOcqG5GZmp9ohvx XCPxSexhFYOMjWAw== 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 3DC71139E7; Wed, 30 Apr 2025 19:11:19 +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 YeWDDdd1Emi7VgAAD6G6ig (envelope-from ); Wed, 30 Apr 2025 19:11:19 +0000 Message-ID: <716d68d7-6888-4da6-a0e1-d8bf6c75f663@suse.de> Date: Wed, 30 Apr 2025 21:11:28 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] [gdb] Fix sig_write for null gdb_stderr From: Tom de Vries To: Tom Tromey Cc: gdb-patches@sourceware.org References: <20250425171845.9934-1-tdevries@suse.de> <20250425171845.9934-2-tdevries@suse.de> <87ldrj2d84.fsf@tromey.com> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWO(0.00)[2]; 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)[]; TO_DN_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo, suse.de:email, 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 4/30/25 20:49, Tom de Vries wrote: > On 4/29/25 17:34, Tom Tromey wrote: >>>>>>> "Tom" == Tom de Vries writes: >> >> Tom> - gdbpy_flush attempts to flush gdb_stdout, which is nullptr >> Tom> - that causes a segfault >> >> When can this be nullptr? >> That seems surprising to me. > > I managed to recognize the situation using: > ... > diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c > index 1b4cc82cce8..fa4186aea3b 100644 > --- a/gdb/tui/tui-io.c > +++ b/gdb/tui/tui-io.c > @@ -869,6 +869,7 @@ tui_setup_io (int mode) >        /* Restore gdb output.  */ >        gdb_stdout = tui_old_stdout; >        gdb_stderr = tui_old_stderr; > +      gdb_assert (gdb_stderr != nullptr); >        gdb_stdlog = tui_old_stdlog; >        gdb_stdtarg = gdb_stderr; >        current_uiout = tui_old_uiout; > ... > > And the backtrace (in an unusual form because of recursion) is: > ... > #19000 0x000000000041a3b2 in main (argc=14, argv=0x7ffc5c28c168) >     at /data/vries/gdb/src/gdb/gdb.c:38 > 38      return gdb_main (&args); > (gdb) down > #18999 0x0000000000b68937 in gdb_main (args=0x7ffc5c28c030) >     at /data/vries/gdb/src/gdb/main.c:1363 > 1363          captured_main (args); > (gdb) > #18998 0x0000000000b6888e in captured_main (data=0x7ffc5c28c030) >     at /data/vries/gdb/src/gdb/main.c:1344 > 1344          captured_command_loop (); > (gdb) > #18997 0x0000000000b66dad in captured_command_loop () >     at /data/vries/gdb/src/gdb/main.c:466 > 466      start_event_loop (); > (gdb) > #18996 0x0000000000b66c21 in start_event_loop () >     at /data/vries/gdb/src/gdb/main.c:402 > 402          result = gdb_do_one_event (); > (gdb) > #18995 0x0000000001985e31 in gdb_do_one_event (mstimeout=-1) >     at /data/vries/gdb/src/gdbsupport/event-loop.cc:263 > 263      return gdb_wait_for_event (1); > (gdb) > #18994 0x0000000001986f70 in gdb_wait_for_event (block=1) >     at /data/vries/gdb/src/gdbsupport/event-loop.cc:672 > 672          handle_file_event (file_ptr, mask); > (gdb) > #18993 0x0000000001986995 in handle_file_event (file_ptr=0x3b26aff0, >     ready_mask=25) at /data/vries/gdb/src/gdbsupport/event-loop.cc:551 > 551          file_ptr->proc (file_ptr->error, file_ptr->client_data); > (gdb) > #18992 0x00000000010563ad in stdin_event_handler (error=1, >     client_data=0x3aec7120) at /data/vries/gdb/src/gdb/ui.c:128 > 128          quit_command ((char *) 0, 0); > (gdb) > #18991 0x00000000006b2e63 in quit_command (args=0x0, from_tty=0) >     at /data/vries/gdb/src/gdb/cli/cli-cmds.c:483 > 483      quit_force (args ? &exit_code : NULL, from_tty); > (gdb) > #18990 0x0000000000fd94dc in quit_force (exit_arg=0x0, from_tty=0) >     at /data/vries/gdb/src/gdb/top.c:1750 > 1750      undo_terminal_modifications_before_exit (); > (gdb) > #18989 0x0000000000fd942f in undo_terminal_modifications_before_exit () >     at /data/vries/gdb/src/gdb/top.c:1718 > 1718      tui_disable (); > (gdb) > #18988 0x000000000103fa11 in tui_disable () >     at /data/vries/gdb/src/gdb/tui/tui.c:562 > 562      tui_setup_io (0); > (gdb) > #18987 0x00000000010129d4 in tui_setup_io (mode=0) >     at /data/vries/gdb/src/gdb/tui/tui-io.c:872 > 872          gdb_assert (gdb_stderr != nullptr); > (gdb) > ... OK, I understand now how this happens. The relevant code is in tui_enable. While initializing, we set tui_active to true, because: ... /* We must mark the tui sub-system active before trying to setup the current layout as tui windows defined by an extension language rely on this flag being true in order to know that the window they are creating is currently valid. */ tui_active = true; ... After that we call tui_set_initial_layout, and the DWARF error is thrown. It's not caught early enough to continue executing tui_enable. Consequently, tui_setup_io (1) is not called. Then when undo_terminal_modifications_before_exit is called, it calls tui_disable, which checks for tui_active, and then calls setup_io (0) assuming setup_io (1) has been called, which is not the case. Thanks, - Tom