gdb: add target_fileio_stat, but no implementations yet

In a later commit I want target_fileio_stat, that is a call that
operates on a filename rather than an open file descriptor as
target_fileio_fstat does.

This commit adds the initial framework for target_fileio_stat, I've
added the top level target function and the virtual target_ops methods
in the target_ops base class.

At this point no actual targets override target_ops::fileio_stat, so
any attempts to call this function will return ENOSYS error code.
This commit is contained in:
Andrew Burgess
2024-05-21 15:39:37 +01:00
parent 3ca6c047a4
commit 08a115cc1c
2 changed files with 47 additions and 0 deletions

View File

@@ -3198,6 +3198,14 @@ target_ops::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
return -1;
}
int
target_ops::fileio_stat (struct inferior *inf, const char *filename,
struct stat *sb, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
}
int
target_ops::fileio_close (int fd, fileio_error *target_errno)
{
@@ -3317,6 +3325,29 @@ target_fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
/* See target.h. */
int
target_fileio_stat (struct inferior *inf, const char *filename,
struct stat *sb, fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
int ret = t->fileio_stat (inf, filename, sb, target_errno);
if (ret == -1 && *target_errno == FILEIO_ENOSYS)
continue;
target_debug_printf_nofunc ("target_fileio_stat (%s) = %d (%d)",
filename, ret,
ret != -1 ? 0 : *target_errno);
return ret;
}
*target_errno = FILEIO_ENOSYS;
return -1;
}
/* See target.h. */
int
target_fileio_close (int fd, fileio_error *target_errno)
{

View File

@@ -1011,6 +1011,14 @@ struct target_ops
*TARGET_ERRNO). */
virtual int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno);
/* Get information about the file FILENAME and put it in SB. Look for
FILENAME in the filesystem as seen by INF. If INF is NULL, use the
filesystem seen by the debugger (GDB or, for remote targets, the
remote stub). Return 0 on success, or -1 if an error occurs (and
set *TARGET_ERRNO). */
virtual int fileio_stat (struct inferior *inf, const char *filename,
struct stat *sb, fileio_error *target_errno);
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
virtual int fileio_close (int fd, fileio_error *target_errno);
@@ -2220,6 +2228,14 @@ extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
extern int target_fileio_fstat (int fd, struct stat *sb,
fileio_error *target_errno);
/* Get information about the file at FILENAME on the target and put it in
SB. Look in the filesystem as seen by INF. If INF is NULL, use the
filesystem seen by the debugger (GDB or, for remote targets, the remote
stub). Return 0 on success, or -1 if an error occurs (and set
*TARGET_ERRNO). */
extern int target_fileio_stat (struct inferior *inf, const char *filename,
struct stat *sb, fileio_error *target_errno);
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_close (int fd, fileio_error *target_errno);