Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Marc Khouzam <marc.khouzam@ericsson.com>
To: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Assertion failure because of missing inferior
Date: Sat, 04 Dec 2010 19:11:00 -0000	[thread overview]
Message-ID: <F7CE05678329534C957159168FA70DEC572E0C0DDD@EUSAACMS0703.eamcs.ericsson.se> (raw)

Hi,

it seems that GDB expects that there always will be a current inferior.
To make sure of this, the CLI command 'remove-inferior' rejects the removing
of the current inferior.

The problem is that the corresponding MI command '-remove-inferior' does not
have the same check.  Please see the session below which makes GDB fail
on an assert.

Now, there is not MI command equivalent to 'inferior' to properly allow a frontend
to change the current inferior.  I understand this as saying that the frontend should
not need to change the current inferior, but should instead always use the MI
--thread-group flag to indicate which inferior the command applies to.
That is fine with me.

So, I was thinking that since a frontend shouldn't care which inferior is
the current one, then '-remove-inferior' could change the current inferior to another
inferior, before doing the removal.  This is pretty much what the frontend would have
to do anyway.  Removing the very last inferior would not be allowed.

The patch below does this.  What do you think of this approach?

Session showing error:

> ./gdb
GNU gdb (GDB) 7.2.0.20101112-cvs
(gdb) add-inferior 
Added inferior 2
(gdb) inf inf
  Num  Description       Executable        
  2    <null>                              
* 1    <null>                              
(gdb) remove-inferior 1
Can not remove current symbol inferior.

=== Not allowed to remove using CLI ===

(gdb) interpreter-exec mi "-remove-inferior i1"
^done

=== Allowed to remove using MI ===

(gdb)  inf inf
  Num  Description       Executable        
  2    <null>                              

=== No current inferior ===

(gdb) file a.out
Reading symbols from /home/lmckhou/testing/a.out...done.
(gdb) list
../../src/gdb/inferior.c:59: internal-error: set_current_inferior: Assertion `inf != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y


2010-12-04  Marc Khouzam  <marc.khouzam@ericsson.com>

	* mi/mi-main.c (mi_cmd_remove_inferior): Don't delete last inferior.
	(get_other_inferior): New.


### Eclipse Workspace Patch 1.0
#P src
Index: gdb/mi/mi-main.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-main.c,v
retrieving revision 1.182
diff -u -r1.182 mi-main.c
--- gdb/mi/mi-main.c    12 Nov 2010 18:46:42 -0000      1.182
+++ gdb/mi/mi-main.c    4 Dec 2010 19:01:02 -0000
@@ -1744,6 +1744,17 @@
   ui_out_field_fmt (uiout, "inferior", "i%d", inf->num);
 }
 
+/* Callback used to find the first inferior other than the
+   current one. */
+static int
+get_other_inferior (struct inferior *inf, void *arg)
+{
+  if (inf == current_inferior ())
+    return 0;
+
+  return 1;
+}
+
 void
 mi_cmd_remove_inferior (char *command, char **argv, int argc)
 {
@@ -1760,6 +1771,15 @@
   if (!inf)
     error ("the specified thread group does not exist");
 
+  if (inf == current_inferior ())
+    {
+      struct inferior *new_inferior = iterate_over_inferiors (get_other_inferior, NULL);
+      if (new_inferior == NULL)
+       error ("Cannot remove last inferior");
+
+      set_current_inferior (new_inferior);
+    }
+
   delete_inferior_1 (inf, 1 /* silent */);
 }


             reply	other threads:[~2010-12-04 19:11 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-04 19:11 Marc Khouzam [this message]
2010-12-07 18:54 ` Tom Tromey
2010-12-08  1:38   ` Marc Khouzam
2010-12-10 19:59     ` Tom Tromey
2010-12-10 20:21       ` Marc Khouzam
2010-12-10 21:01         ` Marc Khouzam
2010-12-10 21:38           ` Marc Khouzam
2010-12-14 14:50             ` Tom Tromey
2010-12-14 15:04               ` Joel Brobecker
2010-12-14 15:31                 ` Pedro Alves
2010-12-15  5:12                   ` Joel Brobecker
2010-12-14 20:00                 ` Marc Khouzam
2010-12-15 15:57                   ` [Python] Segfault when clearing pspace (was: RE: Assertion failure because of missing inferior) Marc Khouzam
2010-12-16 21:26                     ` [Python] Segfault when clearing pspace Tom Tromey
2010-12-18  2:13                       ` Marc Khouzam
2010-12-18  2:19               ` Assertion failure because of missing inferior Marc Khouzam
2010-12-14 14:49           ` Tom Tromey

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=F7CE05678329534C957159168FA70DEC572E0C0DDD@EUSAACMS0703.eamcs.ericsson.se \
    --to=marc.khouzam@ericsson.com \
    --cc=gdb-patches@sourceware.org \
    /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