Re: [PATCH 2/3 v2] Implement vFile:fstat: packet in gdbserver

Pedro Alves
2015-03-11T11:35:16Z

On 03/11/2015 10:33 AM, Gary Benson wrote:

> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -36062,6 +36062,11 @@ These are the currently defined stub features and their properties:
> @tab @samp{-}
> @tab No
>
> +@item @samp{vFile:fstat}
> +@tab No
> +@tab @samp{-}
> +@tab Yes
> +
> @end multitable
>
> These are the currently defined stub features, in more detail:
> @@ -36250,6 +36255,9 @@ breakpoints.
> The remote stub reports the @samp{hwbreak} stop reason for hardware
> breakpoints.
>
> +@item vFile:fstat
> +The remote stub understands the @samp{vFile:fstat} packet.
> +

Thanks, combined with the "set remote ..." bit, I think that was
all that was missing.

> @end table
>
> @item qSymbol::
> @@ -37411,6 +37419,13 @@ packet is used. @samp{vFile:write} returns the number of bytes written,
> which may be shorter than the length of @var{data}, or -1 if an
> error occurred.
>
> +@item vFile:fstat: @var{fd}
> +Get information about the open file corresponding to @var{fd}.
> +On success the information is returned as a binary attachment
> +and the return value is the size of this attachment in bytes.
> +If an error occurs the return value is -1. The format of the
> +returned binary attachment is as described in @ref{struct stat}.
> +

I still think that we should mention the need for the qSupported feature
here. This is because the other vFile:XXX packets don't have associated
qSupported features - GDB just tries them out and detects empty
response (probes them).

For example for the recent "swbreak" feature, I added:

The remote stub must also supply the appropriate @samp{qSupported}
feature indicating support.

> +
> + remote_fileio_to_fio_stat (&st, &fst);
> +
> + bytes_sent = hostio_reply_with_data (own_buf,
> + (char *) &fst, sizeof (fst),
> + new_packet_len);
> +
> + /* If the response does not fit into a single packet, do not attempt
> + to return a partial response, but simply fail. */
> + if (bytes_sent < sizeof (fst))
> + sprintf (own_buf, "F-1,%x", FILEIO_ENOSYS);

It occurred to me that this -1 case isn't really an error with the
syscall, but rather a protocol error. Thus, shouldn't this really
be an RSP E01 error ?

Thanks,
Pedro Alves