Re: [PATCH 3/9 v7] Introduce target_{stop,continue}_ptid

Gary Benson
2014-09-16T09:49:20Z

Doug Evans wrote:
> On Mon, Sep 15, 2014 at 3:07 AM, Gary Benson <gbenson@redhat.com> wrote:
> > Doug Evans wrote:
> > > On Fri, Sep 12, 2014 at 11:19 AM, Pedro Alves <palves@redhat.com> wrote:
> > > > On 09/12/2014 07:08 PM, Doug Evans wrote:
> > > > > Pedro Alves wrote:
> > > > > > I just now noticed the elephant in the room -- target_stop
> > > > > > is asynchronous, doesn't wait for a stop, while and
> > > > > > target_stop_ptid is synchronous. [...]
> > > > >
> > > > > If the above code is right, I think a clarifying comment is
> > > > > required somewhere. It's odd that one can call
> > > > > agent_run_command when the inferior may or may not be stopped
> > > > > yet. [Or is there a bug here? - if I'm reading the gdbserver
> > > > > version correctly it first waits for the inferior to stop]
> > > >
> > > > It's a bug.
> > > >
> > > > (Note that the GDB side interfaces with an out-of-tree
> > > > agent, not GDBserver's agent. I don't know the status of
> > > > that agent.)
> > >
> > > Data point that target_stop should be named target_stop_async?
> >
> > Ok, can I get a summary of this thread, I'm struggling to follow it.
> >
> > a) What should the functions be called:
> > - target_stop_async / target_stop_wait
> > - target_continue_async / target_continue_no_signal
> > - something else?
> >
> > b) Is there a bug here I need to address?
>
> At this point I think we're still in discussion mode, there are no
> conclusions/agreements yet, except for the agreement to use
> target_continue_with_no_signal instead of target_continue_ptid.
>
> To advance the discussion,
> the async case is the subtle case IMO. Evidently (and I'm just going
> by what I see, there may be more data here) someone (*1) looked at the
> name "target_stop" and thought it was async (which is probably what
> I'd do). The function comment doesn't specify. One could argue it's
> sufficient to just fix the function comment, but if we're going to
> have a mix of similar functions, some of which are async and some
> sync, then IMO we should also make the difference stand out in the
> code where it's read. I'd be happy with a convention where all async
> functions ended with _async or _no_wait (the latter reads better to
> me), but I'm guessing I'd be happy with a different convention as
> well.
>
> FAOD,
> there is a bug, but it's not one you specifically need to address.
> I pointed it out because it's a data point that contributes to the discussion.
>
> (*1): I've looked at git log and blame. I'm speaking generically here
> because I think this is unlikely to be a one-off kind of issue. Plus I
> can well imagine me making a similar mistake too. Plus the bug got
> through code review.

Ok, so what I think you're saying is:

a) The target_stop method in GDB should be renamed target_stop_async

b) The common code target_stop_ptid should be renamed... target_stop ?

c) The bug is that in this code in linux-nat.c:

/* Pause all */
target_stop (ptid);

memcpy (s, "qTfSTM", sizeof ("qTfSTM"));
s[sizeof ("qTfSTM")] = 0;

agent_run_command (pid, s, strlen (s) + 1);

the "target_stop" should actually be a call to whatever
target_stop_ptid is renamed to.

One final thing--and I may now be going over something that has been
discussed before--could target_continue_ptid be better renamed as
target_resume_no_signal? It seems to sit better alongside GDB's
target_resume.

Thanks,
Gary

--