public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/hurd: handle inferiors exiting
@ 2022-01-08 22:13 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2022-01-08 22:13 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=038d8b4635eda079a63df176cfa48c47f8c32617

commit 038d8b4635eda079a63df176cfa48c47f8c32617
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Thu Jan 6 15:32:55 2022 +0000

    gdb/hurd: handle inferiors exiting
    
    While testing on GNU/Hurd (i386) I noticed that GDB crashes when an
    inferior exits, with this error:
    
      inferior.c:293: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed.
    
    The problem appears to be in gnu_nat_target::wait.
    
    We always set inferior_ptid to null_ptid before calling target_wait,
    this has been the case since the multi-target changes were made to GDB
    in commit:
    
      commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2
      Date:   Fri Jan 10 20:06:08 2020 +0000
    
          Multi-target support
    
    With follow up changes in commit:
    
      commit 24ed6739b699f329c2c45aedee5f8c7d2f54e493
      Date:   Thu Jan 30 14:35:40 2020 +0000
    
          gdb/remote: Restore support for 'S' stop reply packet
    
    Unfortunately, the GNU/Hurd target is still relying on the value of
    inferior_ptid in the case where an inferior exits - we return the
    value of inferior_ptid as the pid of the process that exited.  This
    was fine in the single target world, where inferior_ptid identified
    the one running inferior, but this is no longer good enough.
    
    Instead, we should return a ptid containing the pid of the process
    that exited, as obtained from the wait event, and this is what this
    commit does.
    
    I've not run the full testsuite on GNU/Hurd as there appear to be lots
    of other issues with this target that makes running the full testsuite
    very painful, but I think this looks like a small easy improvement.

Diff:
---
 gdb/gnu-nat.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index 1d3b5f1a357..9c53e3c0c2f 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -1603,7 +1603,10 @@ rewait:
 							       available
 							       thread.  */
       else
-	ptid = inferior_ptid;	/* let wait_for_inferior handle exit case */
+	{
+	  /* The process exited. */
+	  ptid = ptid_t (inf->pid);
+	}
     }
 
   if (thread


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-08 22:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-08 22:13 [binutils-gdb] gdb/hurd: handle inferiors exiting Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).