Re: Remote protocol question: the documentation says '?' is not required, but maybe it is?

Reuben Thomas
2020-07-21T20:24:11Z

On Tue, 21 Jul 2020 at 20:34, Maciej W. Rozycki <macro@wdc.com> wrote:

> On Tue, 21 Jul 2020, Reuben Thomas wrote:
>
> > > FYI, I do believe `?' is indeed mandatory, as GDB needs to figure out
> the
> > > initial state of the remote target as it has connected to it, and
> there is
> > > no other way.
> >
> > It seems to be more complicated than that. In principle, '?' isn't needed
> > in principle to figure out the initial state: the T packet, or in my
> > current case, the S packet tells GDB the signal, and yet GDB still asks
> for
> > it again with '?'. The signal that caused the remote to halt is not going
> > to change until the next 'c', so there's no need for GDB to ask for it
> > again; and yet it does.
>
> I take you mean a `T' or `S' stop reply, right?
>
> Well, such replies are only expected by GDB in response to specific
> packets, which are all listed at the top of Section E.3 "Stop Reply
> Packets". If you issue an unsolicited stop reply from your debug stub,
> then at best GDB will ignore it and at worst GDB will get confused.
>

Sorry, I didn't explain this clearly enough before.

As you can see in section E.3, T is an allowed reply to the 'c' command.

As I explained in my previous message, the first packet that the debug stub
sends is discarded by gdb.

Therefore, the stub is only sending the T packet when it is allowed: the
first time, it is discarded, and every other time, it is in response to a
'c' command.