Re: add-inferior / clone-inferior

Tom Tromey <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
>>>>> "David" == David Taylor <[email protected]> writes:

David> Looking at remote.c, it stores a global pointer to a structure
David> containing a file descriptor and other state in remote_desc.
David> This variable, and presumably others, are inferior specific.

It looks to me that someone made an attempt to isolate all the
per-remote data into struct remote_state, but then other developers went
ahead and added globals.

David> Looking at inferior.h I see:
David>   /* Private data used by the target vector implementation.  */
David>   struct private_inferior *private;
David> Based on the comment, the structure should probably be called
David> private_target rather than private_inferior.

I think rather this field should be removed and replaced with uses of
the inferior's registry (see registry.h) for those targets that need to
hang data on the inferior.

David> I'm thinking that remote.c should define a struct private_inferior
David> containing, at least, a pointer to 'struct serial *remote_desc' and then
David> *EITHER* changing inferiors needs to save / restore remote_desc (which
David> would mean target_ops entries for { saving / restoring } state when you
David> { switch away from / switch back to } an inferior *OR* all references to
David> remote_desc need to be modified to get to it via

I think using struct remote_state and not private_inferior, but yeah.

David> I'm also thinking that target_ops needs to have a couple of
David> additional fields:

David>     . a boolean -- does the target support multiple concurrent active
David>     instances?

David>     . a counter -- how many active instances do we currently have?

David> I'm also guessing that the above is just the tip of the iceberg or
David> someone would have already done this.

David> What else needs to happen for this to work?  I'm trying to get a feel
David> for how big a project this would be and whether it would be better for
David> us to pursue other options.

It seems like it would only work for target-async as well.
I suppose that is a given already.


The whole target stack needs to be switched out depending on which
target is "active".  I guess one idea would be to make it depend on the
current inferior.  But then I would worry whether the correct inferior
is always selected when gdb is doing various operations.

I think I'd also examine all the calls to push_target, unpush_target,
and target_is_pushed to make sure they are ok.  I think there are hidden
gotchas here.  E.g., "record" will eventually call push_target via
record_full_open -- which examines the current target stack and stores
stuff into a global.

I wonder if there are other UI issues to consider.

Also see the thread containing this message:

    http://sourceware.org/ml/gdb-patches/2010-06/msg00161.html

especially

    http://sourceware.org/ml/gdb-patches/2010-06/msg00200.html

I thought I remembered other discussions of this in the past, but the
above is all I could find.  Maybe we discussed it on irc.

It would be very nice to have a wiki page for this project, with the
plans and links.

Tom
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.