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

Christo Crause
2020-07-21T10:22:32Z

On Sun, Jul 19, 2020 at 9:09 PM Reuben Thomas via Gdb <gdb@sourceware.org>
wrote:

> In particular, this suggests that it is not necessary to support the '?'
> command, which returns the most recent signal.
>
> My simple remote stub indeed implements only 'g', 'G', 'm', 'M', 'c', 'd'
> and 'k'. It also implements '?', and, on startup, sends a 'T' packet.
>
> However, if I remove the implementation of '?', the following conversation
> ensues with gdb:
>
> putpacket:
> >
> T0500:f4dff800;01:f4dff800;02:00400000;03:f580a200;04:00001000;05:00000000;06:f5805200;07:00001000;08:00000000;09:ffffffff;
> > getpacket:
> >
> qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+
> > putpacket:
> > getpacket: vMustReplyEmpty
> > putpacket:
> > getpacket: Hg0
> > putpacket:
> > getpacket: qTStatus
> > putpacket:
> > getpacket: ?
> > putpacket:
> > getpacket: qfThreadInfo
> > putpacket:
> > getpacket: qL1160000000000000000
> > putpacket:
> > getpacket: Hc-1
> > putpacket:
> > getpacket: qC
> > putpacket:
> > getpacket: qAttached
> > putpacket:
> > warning: Invalid remote reply:
> >
>
> and GDB hangs. It seems that it can't cope with my lack of reply to '?'.
>

Reading E.3 suggests that the stop reply packet (S or T) is only expected
after gdb issued one of a few specific commands. So my interpretation (I'm
no expert on the topic) is that your unsolicited T packet is confusing gdb.
It seems as if your debug log is from your gdbserver perspective, can you
also check the communication received on gdb side (set debug remote 1),
this may highlight the reply gdb is complaining about.