public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 1/3] Pass inferior to terminal_save_inferior
Date: Tue, 23 Oct 2018 11:11:00 -0000	[thread overview]
Message-ID: <048ffbfd-e9b8-d223-f59d-d0b7dc139f04@redhat.com> (raw)
In-Reply-To: <7a8c48b3033d53f0c6031843b6424ba7@polymtl.ca>

On 10/23/2018 10:00 AM, Simon Marchi wrote:
> On 2018-10-22 16:54, Pedro Alves wrote:
>> On 10/16/2018 04:38 AM, Simon Marchi wrote:
>>> Instead of relying on the current inferior, pass an inferior pointer to
>>> the target implementing terminal_save_inferior.  There should be no
>>> change in behavior.
>>>
>>
>> Your original patch 3/3 ended up not using the inferior pointer.  :-)
>>
>> I suppose that this doesn't hurt, like the equivalent target_detach
>> change.
> 
> Well, the original 3/3 patch doesn't change the implementation of terminal_save_inferior, it changes the inferior_exit observer, so it's not really related to this change.

Oh, in that case it'd be clearer to not bundle it in the same series then.

> 
>>> I added documentation to terminal_save_inferior, as I understand it
>>> (maybe I understood it wrong, so please take a look).
>>
>> That looks good.  (please recall to update commit log.)
>>
>>> diff --git a/gdb/target.c b/gdb/target.c
>>> index 2d98954b54ac..93d16b90f179 100644
>>> --- a/gdb/target.c
>>> +++ b/gdb/target.c
>>> @@ -511,10 +511,7 @@ target_terminal_is_ours_kind (target_terminal_state desired_state)
>>>    ALL_INFERIORS (inf)
>>>      {
>>>        if (inf->terminal_state == target_terminal_state::is_inferior)
>>> -    {
>>> -      set_current_inferior (inf);
>>> -      current_top_target ()->terminal_save_inferior ();
>>> -    }
>>> +    current_top_target ()->terminal_save_inferior (inf);
>>>      }
>> With multi-target, current_top_target() will depend on
>> the current inferior, so I'll need to put that
>> set_current_inferior call back.
> 
> Can't you access the inferior's target stack directly instead of changing the current inferior?

I can for the call to the top target, but then the problem is the beneath()
calls in all the target-delegates.c delegating implementations.  E.g. here:

  void
 -target_ops::terminal_save_inferior ()
 +target_ops::terminal_save_inferior (inferior *arg0)
  {
 -  this->beneath ()->terminal_save_inferior ();
 +  this->beneath ()->terminal_save_inferior (arg0);
          ^^^^^^^^^
  }

because beneath() looks at the target stack of the current
inferior.  It would need to look for the target beneath in
the target stack of the arg0 inferior instead.  Otherwise
you start the top target call in inferior B, and then
cross the the beneath target of inferior A (the current inferior).
Whoops.  At some point in the branch I made target_ops::beneath
take an optional inferior pointer, but when I stumbled on this
issue in target-delegates.c I ended up reverting it, as it
wasn't easy to fix.  I think that we could maybe teach
make-target-delegates to automatically emit

  void
  target_ops::method (inferior *arg0)
  {
    this->beneath (arg0)->method (arg0);
  }

and:

  void
  target_ops::method (thread_info *arg0)
  {
    this->beneath (arg0->inf)->method (arg0);
  }

iff the method's first parameter is an inferior or thread_info
pointer.  But that was just an idea, I never toyed with it,
because it would be a detour.  So I gave up on the inferior
parameter to target beneath, and thought I'd better focus instead
of getting the multi-target basics in first, even if that means we
need to swap current inferior/thread here and there, as usual.

Thanks,
Pedro Alves

  reply	other threads:[~2018-10-23 11:11 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-16  3:38 Simon Marchi
2018-10-16  3:38 ` [PATCH 2/3] Pass inferior to terminal_inferior Simon Marchi
2018-10-22 20:54   ` Pedro Alves
2018-10-23  9:14     ` Simon Marchi
2018-10-16  3:38 ` [PATCH 3/3] Avoid GDB SIGTTOU on catch exec + set follow-exec-mode new (PR 23368) Simon Marchi
2018-10-17 17:05   ` Pedro Alves
2018-10-20 15:14     ` Simon Marchi
2018-10-20 15:38       ` Simon Marchi
2018-10-22 20:56         ` Pedro Alves
2018-10-23  9:49           ` Simon Marchi
2018-10-23 10:55             ` Pedro Alves
2018-10-24  9:41             ` Andreas Schwab
2018-10-24 14:08               ` Simon Marchi
2018-10-22 20:54 ` [PATCH 1/3] Pass inferior to terminal_save_inferior Pedro Alves
2018-10-23  9:01   ` Simon Marchi
2018-10-23 11:11     ` Pedro Alves [this message]
2018-10-23 20:56       ` Simon Marchi

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=048ffbfd-e9b8-d223-f59d-d0b7dc139f04@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).