diff options
author | Gary Benson <gbenson@redhat.com> | 2015-03-11 17:53:57 +0000 |
---|---|---|
committer | Gary Benson <gbenson@redhat.com> | 2015-03-11 17:53:57 +0000 |
commit | 0a93529c56714b1da3d7106d3e0300764f8bb81c (patch) | |
tree | ca2c7189bcd064a370e9f2f52f9531c2ae72c592 /gdb/remote-fileio.c | |
parent | 791c00567a7ccbae3d71e3b63ac43c0b555079dc (diff) | |
download | gdb-0a93529c56714b1da3d7106d3e0300764f8bb81c.zip gdb-0a93529c56714b1da3d7106d3e0300764f8bb81c.tar.gz gdb-0a93529c56714b1da3d7106d3e0300764f8bb81c.tar.bz2 |
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.
Diffstat (limited to 'gdb/remote-fileio.c')
-rw-r--r-- | gdb/remote-fileio.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c index 0ce0714..3882321 100644 --- a/gdb/remote-fileio.c +++ b/gdb/remote-fileio.c @@ -1321,6 +1321,70 @@ remote_fileio_request (char *buf, int ctrlc_pending_p) remote_fileio_sig_exit (); } + + +/* Unpack an fio_uint_t. */ + +static unsigned int +remote_fileio_to_host_uint (fio_uint_t fnum) +{ + return extract_unsigned_integer ((gdb_byte *) fnum, 4, + BFD_ENDIAN_BIG); +} + +/* Unpack an fio_ulong_t. */ + +static ULONGEST +remote_fileio_to_host_ulong (fio_ulong_t fnum) +{ + return extract_unsigned_integer ((gdb_byte *) fnum, 8, + BFD_ENDIAN_BIG); +} + +/* Unpack an fio_mode_t. */ + +static mode_t +remote_fileio_to_host_mode (fio_mode_t fnum) +{ + return remote_fileio_mode_to_host (remote_fileio_to_host_uint (fnum), + 0); +} + +/* Unpack an fio_time_t. */ + +static time_t +remote_fileio_to_host_time (fio_time_t fnum) +{ + return remote_fileio_to_host_uint (fnum); +} + + +/* See remote-fileio.h. */ + +void +remote_fileio_to_host_stat (struct fio_stat *fst, struct stat *st) +{ + memset (st, 0, sizeof (struct stat)); + + st->st_dev = remote_fileio_to_host_uint (fst->fst_dev); + st->st_ino = remote_fileio_to_host_uint (fst->fst_ino); + st->st_mode = remote_fileio_to_host_mode (fst->fst_mode); + st->st_nlink = remote_fileio_to_host_uint (fst->fst_nlink); + st->st_uid = remote_fileio_to_host_uint (fst->fst_uid); + st->st_gid = remote_fileio_to_host_uint (fst->fst_gid); + st->st_rdev = remote_fileio_to_host_uint (fst->fst_rdev); + st->st_size = remote_fileio_to_host_ulong (fst->fst_size); +#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE + st->st_blksize = remote_fileio_to_host_ulong (fst->fst_blksize); +#endif +#if HAVE_STRUCT_STAT_ST_BLOCKS + st->st_blocks = remote_fileio_to_host_ulong (fst->fst_blocks); +#endif + st->st_atime = remote_fileio_to_host_time (fst->fst_atime); + st->st_mtime = remote_fileio_to_host_time (fst->fst_mtime); + st->st_ctime = remote_fileio_to_host_time (fst->fst_ctime); +} + static void set_system_call_allowed (char *args, int from_tty) |