Implement remote_bfd_iovec_stat

This commit adds a new packet "vFile:fstat:" to the remote protocol
that can be used by to retrieve information about files that have
been previously opened using vFile:open.  vFile:fstat: support is
added to GDB, and remote_bfd_iovec_stat is implemented using it.  If
vFile:fstat: is not supported by the remote GDB creates a dummy result
by zeroing the supplied stat structure and setting its st_size field
to INT_MAX.  This mimics GDB's previous behaviour, with the exception
that GDB did not previously zero the structure so all other fields
would have been returned unchanged, which is to say very likely
populated with random values from the stack.

gdb/ChangeLog:

	* remote-fileio.h (remote_fileio_to_host_stat): New declaration.
	* remote-fileio.c (remote_fileio_to_host_uint): New function.
	(remote_fileio_to_host_ulong): Likewise.
	(remote_fileio_to_host_mode): Likewise.
	(remote_fileio_to_host_time): Likewise.
	(remote_fileio_to_host_stat): Likewise.
	* remote.c (PACKET_vFile_fstat): New enum value.
	(remote_protocol_features): Register the "vFile:fstat" feature.
	(remote_hostio_fstat): New function.
	(remote_bfd_iovec_stat): Use the above.
	(_initialize_remote): Register new "set/show remote
	hostio-fstat-packet" command.
	* symfile.c (separate_debug_file_exists): Update comment.
	* NEWS: Announce new vFile:fstat packet.

gdb/doc/ChangeLog:

	* gdb.texinfo (Remote Configuration): Document the
	"set/show remote hostio-fstat-packet" command.
	(General Query Packets): Document the vFile:fstat
	qSupported features.
	(Host I/O Packets): Document the vFile:fstat packet.
This commit is contained in:
Gary Benson 2015-03-11 17:53:57 +00:00
parent 791c00567a
commit 0a93529c56
8 changed files with 211 additions and 12 deletions

View file

@ -1377,11 +1377,12 @@ separate_debug_file_exists (const char *name, unsigned long crc,
Some operating systems, e.g. Windows, do not provide a meaningful
st_ino; they always set it to zero. (Windows does provide a
meaningful st_dev.) Do not indicate a duplicate library in that
case. While there is no guarantee that a system that provides
meaningful inode numbers will never set st_ino to zero, this is
merely an optimization, so we do not need to worry about false
negatives. */
meaningful st_dev.) Files accessed from gdbservers that do not
support the vFile:fstat packet will also have st_ino set to zero.
Do not indicate a duplicate library in either case. While there
is no guarantee that a system that provides meaningful inode
numbers will never set st_ino to zero, this is merely an
optimization, so we do not need to worry about false negatives. */
if (bfd_stat (abfd, &abfd_stat) == 0
&& abfd_stat.st_ino != 0
@ -1409,9 +1410,9 @@ separate_debug_file_exists (const char *name, unsigned long crc,
{
unsigned long parent_crc;
/* If one (or both) the files are accessed for example the via "remote:"
gdbserver way it does not support the bfd_stat operation. Verify
whether those two files are not the same manually. */
/* If the files could not be verified as different with
bfd_stat then we need to calculate the parent's CRC
to verify whether the files are different or not. */
if (!verified_as_different)
{