Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Yao Qi <yao@codesourcery.com>
To: David Taylor <dtaylor@emc.com>
Cc: <gdb@sourceware.org>
Subject: Re: add-inferior / clone-inferior
Date: Tue, 21 May 2013 01:01:00 -0000	[thread overview]
Message-ID: <519AC76E.4040508@codesourcery.com> (raw)
In-Reply-To: <7249.1369061005@usendtaylorx2l>

On 05/20/2013 10:43 PM, David Taylor wrote:
> The commands add-inferior / clone-inferior and several related commands
> were added as long ago as gdb 7.1.  But, unless I'm missing the obvious,
> they aren't currently very useful.
>
> GDB appears to support multiple "live" inferiors only when the arise as
> the result of a fork or vfork.  Please tell me that I'm wrong and that
> I'm missing the obvious.
>
>      . I start up gdb with no arguments
>      . file my-elf-file
>      . clone-inferior
>      . info inferiors
>
> I now have two inferiors, numbers 1 and 2, same elf file; 1 is curent.
>
>      . target remote <arguments>
>      . inferior 2
>      . target remote <different-arguments>
>
> And I get:
>
>      A program is being debugged already.  Kill it? (y or n)
>
> I also tried attaching to two pre-existing processes, one each two
> different inferiors.  That failed as well.

David,
GDB supports multiple inferiors in a single remote target (in 
extended-remote mode).  GDB can't talk with multiple remote targets in 
parallel so far.  What you need/want is GDB talks with multiple remote 
targets (GDBserver on different boards).

>
> I've looked more at remote targets than attached / forked targets, as we
> are more interested in remote targets.  Thursday last week I would have
> loved to have had 10 inferiors, 5 elf files, 2 inferiors per elf file.
>
> Looking at remote.c, it stores a global pointer to a structure
> containing a file descriptor and other state in remote_desc.
>
> This variable, and presumably others, are inferior specific.
>
> Looking at inferior.h I see:
>
>    /* Private data used by the target vector implementation.  */
>    struct private_inferior *private;
>
> Based on the comment, the structure should probably be called
> private_target rather than private_inferior.
>
> I'm thinking that remote.c should define a struct private_inferior
> containing, at least, a pointer to 'struct serial *remote_desc' and then
> *EITHER* changing inferiors needs to save / restore remote_desc (which
> would mean target_ops entries for { saving / restoring } state when you
> { switch away from / switch back to } an inferior *OR* all references to
> remote_desc need to be modified to get to it via
>
>      current_inferior -> private -> remote_desc -> ...
>

Probably, each inferior should be ref-count'ed the remote_desc, because 
multiple inferiors may share the same remote_desc, and the connection 
leak can be avoided.  I am not the people design and write this part of 
code, but I don't see something wrong in your thoughts.

> I'm also thinking that target_ops needs to have a couple of additional fields:
>
>      . a boolean -- does the target support multiple concurrent active
>      instances?
>
>      . a counter -- how many active instances do we currently have?
>

What do you mean by "instance" here?  a process on a target board 
physically?

>
> p.s.  It would also be nice if inferiors could be named, otherwise
> you'll end up creating a crib sheet telling you which is which.  It's
> trivial, but it makes me think that no one really uses add-inferior /
> clone-inferior.

In terms of naming, we are proposing ITSET (inferior/thread set) or 
PTSET (process/thread set) to GDB 
<http://sourceware.org/ml/gdb-patches/2013-04/msg00031.html>.  With 
ITSET, you can name a set of inferiors:

(gdb) defset foo i1-2  // define named itset 'foo' for inferior 1 and 2
(gdb) defset bar i3-4  // define named itset 'foo' for inferior 3 and 4

and you can apply command to named set via proposed command 'scope':

// detach from inferiors in set 'foo'.
(gdb) scope foo detach
// check the stack backtrace of inferiors in set 'bar'.
(gdb) scope bar bt
// generate corefile for each process in set 'foo' and 'bar'.
(gdb) scope bar,foo gcore

Hope ITSET is helpful on your naming issue.

-- 
Yao (齐尧)


  parent reply	other threads:[~2013-05-21  1:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-20 14:43 David Taylor
2013-05-20 15:06 ` Luis Machado
2013-05-20 15:46   ` David Taylor
2013-05-20 15:52     ` Luis Machado
2013-05-21  1:01 ` Yao Qi [this message]
2013-05-21 13:15   ` David Taylor
2013-05-21 13:52     ` Tom Tromey
2013-05-21 14:35       ` David Taylor
2013-05-21 15:46 ` Tom Tromey
2013-05-22 14:47   ` Tom Tromey
2013-05-22 18:21     ` David Taylor
2013-05-22 18:50       ` Tom Tromey
2013-05-22 19:42         ` David Taylor
2013-05-22 20:21           ` Tom Tromey
2013-06-24 20:50   ` 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=519AC76E.4040508@codesourcery.com \
    --to=yao@codesourcery.com \
    --cc=dtaylor@emc.com \
    --cc=gdb@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