This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patchv4] Workaround gdbserver<7.7 for setfs
- From: Pedro Alves <palves at redhat dot com>
- To: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Cc: gdb-patches at sourceware dot org, Gary Benson <gbenson at redhat dot com>
- Date: Wed, 6 Apr 2016 15:31:07 +0100
- Subject: Re: [patchv4] Workaround gdbserver<7.7 for setfs
- Authentication-results: sourceware.org; auth=none
- References: <20160319201842 dot GA16540 at host1 dot jankratochvil dot net> <56F13963 dot 9040204 at redhat dot com> <20160322131604 dot GA24312 at host1 dot jankratochvil dot net> <56F14F1E dot 5010606 at redhat dot com> <20160323211547 dot GA17400 at host1 dot jankratochvil dot net> <20160324220933 dot GA27445 at host1 dot jankratochvil dot net> <20160324223241 dot GB2548 at host1 dot jankratochvil dot net> <56FBDFE7 dot 90203 at redhat dot com> <20160404211406 dot GA32241 at host1 dot jankratochvil dot net> <5703E7FF dot 6060304 at redhat dot com> <20160406134911 dot GA30545 at host1 dot jankratochvil dot net>
On 04/06/2016 02:49 PM, Jan Kratochvil wrote:
>> > Try qMustReplyEmpty or something like that instead.
> With these requirements on this workaround I have followed the gdbserver-7.6
> sources and the bug was in function handle_notif_ack which is called only from
> handle_v_requests, therefore for any packets /^v/.
Ah.
> OK to check in this one?
OK with a change.
> diff --git a/gdb/remote.c b/gdb/remote.c
> index 5c407b6..a88f4cd 100644
> --- a/gdb/remote.c
> +++ b/gdb/remote.c
> @@ -1496,6 +1496,15 @@ enum {
>
> static struct packet_config remote_protocol_packets[PACKET_MAX];
>
> +/* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
> + unknown 'v' packet with string "OK". "OK" gets interpreted by GDB
> + as a reply to known packet. For packet "vFile:setfs:" it is an
> + invalid reply and GDB would return error in
> + remote_hostio_set_filesystem, making remote files access impossible.
> + If this variable is non-zero it means the remote gdbserver is buggy
> + and any not yet detected packets are assumed as unsupported. */
> +static int unknown_v_replies_ok;
This comment looks great now, thanks. It helps the reader understand
exactly what is being worked around, and it'll help us decide what to
do in the future if this ever gets in the way.
Please make this new variable a field of 'struct remote_state' instead
of a global.
OK with that change.
Thanks,
Pedro Alves