Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: Tom Tromey <tom@tromey.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 1/2] [gdb] Fix sig_write for null gdb_stderr
Date: Wed, 30 Apr 2025 20:49:11 +0200	[thread overview]
Message-ID: <dd0965f6-a805-4a99-b1a9-2b7bf7410be1@suse.de> (raw)
In-Reply-To: <87ldrj2d84.fsf@tromey.com>

On 4/29/25 17:34, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> 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)
...

Thanks,
- Tom

  reply	other threads:[~2025-04-30 18:49 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-25 17:18 [PATCH 0/2] [gdb] Fix error handling with nullptr gdb_stdout/gdb_stderr Tom de Vries
2025-04-25 17:18 ` [PATCH 1/2] [gdb] Fix sig_write for null gdb_stderr Tom de Vries
2025-04-28 15:17   ` Simon Marchi
2025-04-29 11:50     ` Tom de Vries
2025-04-29 15:34   ` Tom Tromey
2025-04-30 18:49     ` Tom de Vries [this message]
2025-04-30 19:11       ` Tom de Vries
2025-05-02 18:45         ` Tom Tromey
2025-04-25 17:18 ` [PATCH 2/2] [gdb] Handle nullptr stream in gdb_flush Tom de Vries
2025-04-28 15:21   ` Simon Marchi
2025-04-28 16:32     ` Tom de Vries
2025-04-28 16:38       ` Simon Marchi
2025-04-29 11:52         ` Tom de Vries

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=dd0965f6-a805-4a99-b1a9-2b7bf7410be1@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.com \
    /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