* [PATCH 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h
@ 2022-08-26 19:54 Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-26 19:54 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
I don't see why include/gdb/fileio.h is placed there. It's not
installed by "make install", and it's not included by anything outside
of gdb/gdbserver/gdbsupport.
Move its content back to gdbsupport/fileio.h. I have omitted the bits
inside an `#if 0`, since it's obviously not used, as well as the
"limits" constants, which are also unused.
Change-Id: I6fbc2ea10fbe4cfcf15f9f76006b31b99c20e5a9
---
gdb/gdb_bfd.c | 2 +-
gdb/remote.c | 2 +-
gdb/target.c | 2 +-
gdbserver/hostio.cc | 2 +-
gdbserver/win32-low.cc | 2 +-
gdbsupport/fileio.h | 110 ++++++++++++++++++++++++++++++-
include/gdb/fileio.h | 144 -----------------------------------------
7 files changed, 114 insertions(+), 150 deletions(-)
delete mode 100644 include/gdb/fileio.h
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 6c03ae5ef05..1079623d79f 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -30,7 +30,7 @@
#endif
#endif
#include "target.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "inferior.h"
#include "cli/cli-style.h"
diff --git a/gdb/remote.c b/gdb/remote.c
index 70f918a7362..5bae65472ed 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -59,7 +59,7 @@
#include "gdbcore.h"
#include "remote-fileio.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include <sys/stat.h>
#include "xml-support.h"
diff --git a/gdb/target.c b/gdb/target.c
index 41144901fc1..9d698afb09d 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -40,7 +40,7 @@
#include "exec.h"
#include "inline-frame.h"
#include "tracepoint.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "gdbsupport/agent.h"
#include "auxv.h"
#include "target-debug.h"
diff --git a/gdbserver/hostio.cc b/gdbserver/hostio.cc
index 2d17b6d1a70..4f763f382bb 100644
--- a/gdbserver/hostio.cc
+++ b/gdbserver/hostio.cc
@@ -19,7 +19,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "server.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "hostio.h"
#include <fcntl.h>
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 5e2c028d683..af132f60215 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -20,7 +20,7 @@
#include "server.h"
#include "regcache.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "mem-break.h"
#include "win32-low.h"
#include "gdbthread.h"
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 2b4f977a020..9809c162314 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -20,9 +20,117 @@
#ifndef COMMON_FILEIO_H
#define COMMON_FILEIO_H
-#include "gdb/fileio.h"
#include <sys/stat.h>
+/* The following flags are defined to be independent of the host
+ as well as the target side implementation of these constants.
+ All constants are defined with a leading FILEIO_ in the name
+ to allow the usage of these constants together with the
+ corresponding implementation dependent constants in one module. */
+
+/* open(2) flags */
+#define FILEIO_O_RDONLY 0x0
+#define FILEIO_O_WRONLY 0x1
+#define FILEIO_O_RDWR 0x2
+#define FILEIO_O_APPEND 0x8
+#define FILEIO_O_CREAT 0x200
+#define FILEIO_O_TRUNC 0x400
+#define FILEIO_O_EXCL 0x800
+#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
+ FILEIO_O_RDWR | FILEIO_O_APPEND| \
+ FILEIO_O_CREAT | FILEIO_O_TRUNC| \
+ FILEIO_O_EXCL)
+
+/* mode_t bits */
+#define FILEIO_S_IFREG 0100000
+#define FILEIO_S_IFDIR 040000
+#define FILEIO_S_IFCHR 020000
+#define FILEIO_S_IRUSR 0400
+#define FILEIO_S_IWUSR 0200
+#define FILEIO_S_IXUSR 0100
+#define FILEIO_S_IRWXU 0700
+#define FILEIO_S_IRGRP 040
+#define FILEIO_S_IWGRP 020
+#define FILEIO_S_IXGRP 010
+#define FILEIO_S_IRWXG 070
+#define FILEIO_S_IROTH 04
+#define FILEIO_S_IWOTH 02
+#define FILEIO_S_IXOTH 01
+#define FILEIO_S_IRWXO 07
+#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
+ FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
+ FILEIO_S_IRWXO)
+
+/* lseek(2) flags */
+#define FILEIO_SEEK_SET 0
+#define FILEIO_SEEK_CUR 1
+#define FILEIO_SEEK_END 2
+
+/* errno values */
+#define FILEIO_EPERM 1
+#define FILEIO_ENOENT 2
+#define FILEIO_EINTR 4
+#define FILEIO_EIO 5
+#define FILEIO_EBADF 9
+#define FILEIO_EACCES 13
+#define FILEIO_EFAULT 14
+#define FILEIO_EBUSY 16
+#define FILEIO_EEXIST 17
+#define FILEIO_ENODEV 19
+#define FILEIO_ENOTDIR 20
+#define FILEIO_EISDIR 21
+#define FILEIO_EINVAL 22
+#define FILEIO_ENFILE 23
+#define FILEIO_EMFILE 24
+#define FILEIO_EFBIG 27
+#define FILEIO_ENOSPC 28
+#define FILEIO_ESPIPE 29
+#define FILEIO_EROFS 30
+#define FILEIO_ENOSYS 88
+#define FILEIO_ENAMETOOLONG 91
+#define FILEIO_EUNKNOWN 9999
+
+#define FIO_INT_LEN 4
+#define FIO_UINT_LEN 4
+#define FIO_MODE_LEN 4
+#define FIO_TIME_LEN 4
+#define FIO_LONG_LEN 8
+#define FIO_ULONG_LEN 8
+
+typedef char fio_int_t[FIO_INT_LEN];
+typedef char fio_uint_t[FIO_UINT_LEN];
+typedef char fio_mode_t[FIO_MODE_LEN];
+typedef char fio_time_t[FIO_TIME_LEN];
+typedef char fio_long_t[FIO_LONG_LEN];
+typedef char fio_ulong_t[FIO_ULONG_LEN];
+
+/* Struct stat as used in protocol. For complete independence
+ of host/target systems, it's defined as an array with offsets
+ to the members. */
+
+struct fio_stat
+{
+ fio_uint_t fst_dev;
+ fio_uint_t fst_ino;
+ fio_mode_t fst_mode;
+ fio_uint_t fst_nlink;
+ fio_uint_t fst_uid;
+ fio_uint_t fst_gid;
+ fio_uint_t fst_rdev;
+ fio_ulong_t fst_size;
+ fio_ulong_t fst_blksize;
+ fio_ulong_t fst_blocks;
+ fio_time_t fst_atime;
+ fio_time_t fst_mtime;
+ fio_time_t fst_ctime;
+};
+
+struct fio_timeval
+{
+ fio_time_t ftv_sec;
+ fio_long_t ftv_usec;
+};
+
/* Convert a host-format errno value to a File-I/O error number. */
extern int host_to_fileio_error (int error);
diff --git a/include/gdb/fileio.h b/include/gdb/fileio.h
deleted file mode 100644
index f472f828f72..00000000000
--- a/include/gdb/fileio.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Hosted File I/O interface definitions, for GDB, the GNU Debugger.
-
- Copyright (C) 2003-2022 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GDB_FILEIO_H_
-#define GDB_FILEIO_H_
-
-/* The following flags are defined to be independent of the host
- as well as the target side implementation of these constants.
- All constants are defined with a leading FILEIO_ in the name
- to allow the usage of these constants together with the
- corresponding implementation dependent constants in one module. */
-
-/* open(2) flags */
-#define FILEIO_O_RDONLY 0x0
-#define FILEIO_O_WRONLY 0x1
-#define FILEIO_O_RDWR 0x2
-#define FILEIO_O_APPEND 0x8
-#define FILEIO_O_CREAT 0x200
-#define FILEIO_O_TRUNC 0x400
-#define FILEIO_O_EXCL 0x800
-#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
- FILEIO_O_RDWR | FILEIO_O_APPEND| \
- FILEIO_O_CREAT | FILEIO_O_TRUNC| \
- FILEIO_O_EXCL)
-
-/* mode_t bits */
-#define FILEIO_S_IFREG 0100000
-#define FILEIO_S_IFDIR 040000
-#define FILEIO_S_IFCHR 020000
-#define FILEIO_S_IRUSR 0400
-#define FILEIO_S_IWUSR 0200
-#define FILEIO_S_IXUSR 0100
-#define FILEIO_S_IRWXU 0700
-#define FILEIO_S_IRGRP 040
-#define FILEIO_S_IWGRP 020
-#define FILEIO_S_IXGRP 010
-#define FILEIO_S_IRWXG 070
-#define FILEIO_S_IROTH 04
-#define FILEIO_S_IWOTH 02
-#define FILEIO_S_IXOTH 01
-#define FILEIO_S_IRWXO 07
-#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
- FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
- FILEIO_S_IRWXO)
-
-/* lseek(2) flags */
-#define FILEIO_SEEK_SET 0
-#define FILEIO_SEEK_CUR 1
-#define FILEIO_SEEK_END 2
-
-/* errno values */
-#define FILEIO_EPERM 1
-#define FILEIO_ENOENT 2
-#define FILEIO_EINTR 4
-#define FILEIO_EIO 5
-#define FILEIO_EBADF 9
-#define FILEIO_EACCES 13
-#define FILEIO_EFAULT 14
-#define FILEIO_EBUSY 16
-#define FILEIO_EEXIST 17
-#define FILEIO_ENODEV 19
-#define FILEIO_ENOTDIR 20
-#define FILEIO_EISDIR 21
-#define FILEIO_EINVAL 22
-#define FILEIO_ENFILE 23
-#define FILEIO_EMFILE 24
-#define FILEIO_EFBIG 27
-#define FILEIO_ENOSPC 28
-#define FILEIO_ESPIPE 29
-#define FILEIO_EROFS 30
-#define FILEIO_ENOSYS 88
-#define FILEIO_ENAMETOOLONG 91
-#define FILEIO_EUNKNOWN 9999
-
-/* limits */
-#define FILEIO_INT_MIN -2147483648L
-#define FILEIO_INT_MAX 2147483647L
-#define FILEIO_UINT_MAX 4294967295UL
-#define FILEIO_LONG_MIN -9223372036854775808LL
-#define FILEIO_LONG_MAX 9223372036854775807LL
-#define FILEIO_ULONG_MAX 18446744073709551615ULL
-
-/* Integral types as used in protocol. */
-#if 0
-typedef __int32_t fio_int_t;
-typedef __uint32_t fio_uint_t, fio_mode_t, fio_time_t;
-typedef __int64_t fio_long_t;
-typedef __uint64_t fio_ulong_t;
-#endif
-
-#define FIO_INT_LEN 4
-#define FIO_UINT_LEN 4
-#define FIO_MODE_LEN 4
-#define FIO_TIME_LEN 4
-#define FIO_LONG_LEN 8
-#define FIO_ULONG_LEN 8
-
-typedef char fio_int_t[FIO_INT_LEN];
-typedef char fio_uint_t[FIO_UINT_LEN];
-typedef char fio_mode_t[FIO_MODE_LEN];
-typedef char fio_time_t[FIO_TIME_LEN];
-typedef char fio_long_t[FIO_LONG_LEN];
-typedef char fio_ulong_t[FIO_ULONG_LEN];
-
-/* Struct stat as used in protocol. For complete independence
- of host/target systems, it's defined as an array with offsets
- to the members. */
-
-struct fio_stat {
- fio_uint_t fst_dev;
- fio_uint_t fst_ino;
- fio_mode_t fst_mode;
- fio_uint_t fst_nlink;
- fio_uint_t fst_uid;
- fio_uint_t fst_gid;
- fio_uint_t fst_rdev;
- fio_ulong_t fst_size;
- fio_ulong_t fst_blksize;
- fio_ulong_t fst_blocks;
- fio_time_t fst_atime;
- fio_time_t fst_mtime;
- fio_time_t fst_ctime;
-};
-
-struct fio_timeval {
- fio_time_t ftv_sec;
- fio_long_t ftv_usec;
-};
-
-#endif /* GDB_FILEIO_H_ */
--
2.37.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] gdbsupport: convert FILEIO_* macros to an enum
2022-08-26 19:54 [PATCH 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
@ 2022-08-26 19:54 ` Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h.cc} and rename Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
2 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-26 19:54 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
Converting from free-form macros to an enum gives a bit of type-safety.
This caught places where we would assign host error numbers to what
should contain a target fileio error number, for instance in
target_fileio_pread.
I added the FILEIO_SUCCESS enumerator, because
remote.c:remote_hostio_parse_result initializes the remote_errno output
variable to 0. It seems better to have an explicit enumerator than to
assign a value for which there is no enumerator. I considered
initializing this variable to FILEIO_EUNKNOWN instead, such that if the
remote side replies with an error and omits the errno value, we'll get
an errno that represents an error instead of 0 (which reprensents no
error). But it's not clear what the consequences of that change would
be, so I prefer to err on the side of caution and just keep the existing
behavior (there is no intended change in behavior with this patch).
Note that remote_hostio_parse_resul still reads blindly what the remote
side sends as a target errno into this variable, so we can still end up
with a nonsensical value here. It's not good, but out of the scope of
this patch.
Convert host_to_fileio_error and fileio_errno_to_host to return / accept
a fileio_error instead of an int, and cascade the change in the whole
chain that uses that.
Change-Id: I454b0e3fcf0732447bc872252fa8e57d138b0e03
---
gdb/gdb_bfd.c | 11 +++---
gdb/inf-child.c | 14 ++++----
gdb/inf-child.h | 14 ++++----
gdb/linux-nat.c | 6 ++--
gdb/linux-nat.h | 6 ++--
gdb/linux-tdep.c | 2 +-
gdb/remote.c | 82 +++++++++++++++++++++++---------------------
gdb/sparc64-tdep.c | 8 ++---
gdb/target.c | 46 ++++++++++++-------------
gdb/target.h | 29 ++++++++--------
gdbsupport/fileio.cc | 2 +-
gdbsupport/fileio.h | 50 ++++++++++++++-------------
12 files changed, 140 insertions(+), 130 deletions(-)
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 1079623d79f..46e2c357e3f 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -305,7 +305,7 @@ gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
/* Return the system error number corresponding to ERRNUM. */
static int
-fileio_errno_to_host (int errnum)
+fileio_errno_to_host (fileio_error errnum)
{
switch (errnum)
{
@@ -369,7 +369,8 @@ static void *
gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
{
const char *filename = bfd_get_filename (abfd);
- int fd, target_errno;
+ int fd;
+ fileio_error target_errno;
int *stream;
gdb_bfd_open_closure *oclosure = (gdb_bfd_open_closure *) open_closure;
@@ -399,7 +400,7 @@ gdb_bfd_iovec_fileio_pread (struct bfd *abfd, void *stream, void *buf,
file_ptr nbytes, file_ptr offset)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
file_ptr pos, bytes;
pos = 0;
@@ -442,7 +443,7 @@ static int
gdb_bfd_iovec_fileio_close (struct bfd *abfd, void *stream)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
xfree (stream);
@@ -471,7 +472,7 @@ gdb_bfd_iovec_fileio_fstat (struct bfd *abfd, void *stream,
struct stat *sb)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
int result;
result = target_fileio_fstat (fd, sb, &target_errno);
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index 56ebd2a5549..ca0af4c1b03 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -233,7 +233,7 @@ inf_child_target::pid_to_exec_file (int pid)
int
inf_child_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
int nat_flags;
mode_t nat_mode;
@@ -257,7 +257,7 @@ inf_child_target::fileio_open (struct inferior *inf, const char *filename,
int
inf_child_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
int ret;
@@ -284,7 +284,7 @@ inf_child_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
inf_child_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
int ret;
@@ -310,7 +310,7 @@ inf_child_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
/* Implementation of to_fileio_fstat. */
int
-inf_child_target::fileio_fstat (int fd, struct stat *sb, int *target_errno)
+inf_child_target::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
int ret;
@@ -324,7 +324,7 @@ inf_child_target::fileio_fstat (int fd, struct stat *sb, int *target_errno)
/* Implementation of to_fileio_close. */
int
-inf_child_target::fileio_close (int fd, int *target_errno)
+inf_child_target::fileio_close (int fd, fileio_error *target_errno)
{
int ret;
@@ -339,7 +339,7 @@ inf_child_target::fileio_close (int fd, int *target_errno)
int
inf_child_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
int ret;
@@ -354,7 +354,7 @@ inf_child_target::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
inf_child_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
/* We support readlink only on systems that also provide a compile-time
maximum path length (PATH_MAX), at least for now. */
diff --git a/gdb/inf-child.h b/gdb/inf-child.h
index ae5ace46f30..16782038011 100644
--- a/gdb/inf-child.h
+++ b/gdb/inf-child.h
@@ -75,19 +75,19 @@ class inf_child_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno) override;
- int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
- int fileio_close (int fd, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
+ int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno) override;
+ int fileio_close (int fd, fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string> fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
bool use_agent (bool use) override;
bool can_use_agent () override;
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index e638e8ad04e..d4639766088 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4372,7 +4372,7 @@ linux_nat_fileio_pid_of (struct inferior *inf)
int
linux_nat_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
int nat_flags;
mode_t nat_mode;
@@ -4397,7 +4397,7 @@ linux_nat_target::fileio_open (struct inferior *inf, const char *filename,
gdb::optional<std::string>
linux_nat_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
char buf[PATH_MAX];
int len;
@@ -4417,7 +4417,7 @@ linux_nat_target::fileio_readlink (struct inferior *inf, const char *filename,
int
linux_nat_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
int ret;
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 38e253eff36..a9b91a5e908 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -101,16 +101,16 @@ class linux_nat_target : public inf_ptrace_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string>
fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int insert_fork_catchpoint (int) override;
int remove_fork_catchpoint (int) override;
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 5fe6be16c31..cde98e1a8c1 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -813,7 +813,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
int status_f = (what == IP_STATUS || what == IP_ALL);
int stat_f = (what == IP_STAT || what == IP_ALL);
char filename[100];
- int target_errno;
+ fileio_error target_errno;
if (args && isdigit (args[0]))
{
diff --git a/gdb/remote.c b/gdb/remote.c
index 5bae65472ed..e066384ab2b 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -560,26 +560,26 @@ class remote_target : public process_stratum_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
- int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
+ int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno) override;
- int fileio_close (int fd, int *target_errno) override;
+ int fileio_close (int fd, fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string>
fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
bool supports_enable_disable_tracepoint () override;
@@ -701,25 +701,25 @@ class remote_target : public process_stratum_target
void remote_file_delete (const char *remote_file, int from_tty);
int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_send_command (int command_bytes, int which_packet,
- int *remote_errno, const char **attachment,
+ fileio_error *remote_errno, const char **attachment,
int *attachment_len);
int remote_hostio_set_filesystem (struct inferior *inf,
- int *remote_errno);
+ fileio_error *remote_errno);
/* We should get rid of this and use fileio_open directly. */
int remote_hostio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno);
- int remote_hostio_close (int fd, int *remote_errno);
+ fileio_error *remote_errno);
+ int remote_hostio_close (int fd, fileio_error *remote_errno);
int remote_hostio_unlink (inferior *inf, const char *filename,
- int *remote_errno);
+ fileio_error *remote_errno);
struct remote_state *get_remote_state ();
@@ -12130,7 +12130,7 @@ remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
}
/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
- value, *REMOTE_ERRNO to the remote error number or zero if none
+ value, *REMOTE_ERRNO to the remote error number or FILEIO_SUCCESS if none
was included, and *ATTACHMENT to point to the start of the annex
if any. The length of the packet isn't needed here; there may
be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
@@ -12140,11 +12140,11 @@ remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
static int
remote_hostio_parse_result (const char *buffer, int *retcode,
- int *remote_errno, const char **attachment)
+ fileio_error *remote_errno, const char **attachment)
{
char *p, *p2;
- *remote_errno = 0;
+ *remote_errno = FILEIO_SUCCESS;
*attachment = NULL;
if (buffer[0] != 'F')
@@ -12159,7 +12159,7 @@ remote_hostio_parse_result (const char *buffer, int *retcode,
if (*p == ',')
{
errno = 0;
- *remote_errno = strtol (p + 1, &p2, 16);
+ *remote_errno = (fileio_error) strtol (p + 1, &p2, 16);
if (errno != 0 || p + 1 == p2)
return -1;
p = p2;
@@ -12196,7 +12196,7 @@ remote_hostio_parse_result (const char *buffer, int *retcode,
int
remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
- int *remote_errno, const char **attachment,
+ fileio_error *remote_errno, const char **attachment,
int *attachment_len)
{
struct remote_state *rs = get_remote_state ();
@@ -12281,7 +12281,7 @@ readahead_cache::invalidate_fd (int fd)
int
remote_target::remote_hostio_set_filesystem (struct inferior *inf,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
@@ -12318,7 +12318,7 @@ remote_target::remote_hostio_set_filesystem (struct inferior *inf,
int
remote_target::remote_hostio_open (inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12361,7 +12361,7 @@ remote_target::remote_hostio_open (inferior *inf, const char *filename,
int
remote_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno)
+ fileio_error *remote_errno)
{
return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
remote_errno);
@@ -12371,7 +12371,7 @@ remote_target::fileio_open (struct inferior *inf, const char *filename,
int
remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12398,7 +12398,7 @@ remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
}
@@ -12408,7 +12408,7 @@ remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12468,7 +12468,7 @@ readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
int
remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
int ret;
struct remote_state *rs = get_remote_state ();
@@ -12508,7 +12508,7 @@ remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
int
remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
}
@@ -12516,7 +12516,7 @@ remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
/* Implementation of to_fileio_close. */
int
-remote_target::remote_hostio_close (int fd, int *remote_errno)
+remote_target::remote_hostio_close (int fd, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12533,7 +12533,7 @@ remote_target::remote_hostio_close (int fd, int *remote_errno)
}
int
-remote_target::fileio_close (int fd, int *remote_errno)
+remote_target::fileio_close (int fd, fileio_error *remote_errno)
{
return remote_hostio_close (fd, remote_errno);
}
@@ -12542,7 +12542,7 @@ remote_target::fileio_close (int fd, int *remote_errno)
int
remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12562,7 +12562,7 @@ remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
int
remote_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
return remote_hostio_unlink (inf, filename, remote_errno);
}
@@ -12571,7 +12571,7 @@ remote_target::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
remote_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12608,7 +12608,7 @@ remote_target::fileio_readlink (struct inferior *inf, const char *filename,
/* Implementation of to_fileio_fstat. */
int
-remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
+remote_target::fileio_fstat (int fd, struct stat *st, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12680,7 +12680,8 @@ remote_target::filesystem_is_local ()
if (ps == PACKET_SUPPORT_UNKNOWN)
{
- int fd, remote_errno;
+ int fd;
+ fileio_error remote_errno;
/* Try opening a file to probe support. The supplied
filename is irrelevant, we only care about whether
@@ -12792,7 +12793,7 @@ class scoped_remote_fd
{
try
{
- int remote_errno;
+ fileio_error remote_errno;
m_remote->remote_hostio_close (m_fd, &remote_errno);
}
catch (...)
@@ -12843,7 +12844,8 @@ void
remote_target::remote_file_put (const char *local_file, const char *remote_file,
int from_tty)
{
- int retcode, remote_errno, bytes, io_size;
+ int retcode, bytes, io_size;
+ fileio_error remote_errno;
int bytes_in_buffer;
int saw_eof;
ULONGEST offset;
@@ -12935,7 +12937,8 @@ void
remote_target::remote_file_get (const char *remote_file, const char *local_file,
int from_tty)
{
- int remote_errno, bytes, io_size;
+ fileio_error remote_errno;
+ int bytes, io_size;
ULONGEST offset;
scoped_remote_fd fd
@@ -12993,7 +12996,8 @@ remote_file_delete (const char *remote_file, int from_tty)
void
remote_target::remote_file_delete (const char *remote_file, int from_tty)
{
- int retcode, remote_errno;
+ int retcode;
+ fileio_error remote_errno;
retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
if (retcode == -1)
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 5ca5f2dca8c..3842bf5a556 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -166,7 +166,7 @@ get_adi_info (pid_t pid)
void
sparc64_forget_process (pid_t pid)
{
- int target_errno;
+ fileio_error target_errno;
for (auto pit = adi_proc_list.before_begin (),
it = std::next (pit);
@@ -287,7 +287,7 @@ adi_tag_fd (void)
char cl_name[MAX_PROC_NAME_SIZE];
snprintf (cl_name, sizeof(cl_name), "/proc/%ld/adi/tags", (long) pid);
- int target_errno;
+ fileio_error target_errno;
proc->stat.tag_fd = target_fileio_open (NULL, cl_name, O_RDWR|O_EXCL,
false, 0, &target_errno);
return proc->stat.tag_fd;
@@ -350,7 +350,7 @@ adi_read_versions (CORE_ADDR vaddr, size_t size, gdb_byte *tags)
paddress (target_gdbarch (), vaddr * ast.blksize));
}
- int target_errno;
+ fileio_error target_errno;
return target_fileio_pread (fd, tags, size, vaddr, &target_errno);
}
@@ -371,7 +371,7 @@ adi_write_versions (CORE_ADDR vaddr, size_t size, unsigned char *tags)
paddress (target_gdbarch (), vaddr * ast.blksize));
}
- int target_errno;
+ fileio_error target_errno;
return target_fileio_pwrite (fd, tags, size, vaddr, &target_errno);
}
diff --git a/gdb/target.c b/gdb/target.c
index 9d698afb09d..28560983625 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3206,7 +3206,7 @@ fileio_fd_to_fh (int fd)
int
target_ops::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3214,7 +3214,7 @@ target_ops::fileio_open (struct inferior *inf, const char *filename,
int
target_ops::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3222,21 +3222,21 @@ target_ops::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
target_ops::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
}
int
-target_ops::fileio_fstat (int fd, struct stat *sb, int *target_errno)
+target_ops::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
}
int
-target_ops::fileio_close (int fd, int *target_errno)
+target_ops::fileio_close (int fd, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3244,7 +3244,7 @@ target_ops::fileio_close (int fd, int *target_errno)
int
target_ops::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3252,7 +3252,7 @@ target_ops::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
target_ops::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return {};
@@ -3262,7 +3262,7 @@ target_ops::fileio_readlink (struct inferior *inf, const char *filename,
int
target_fileio_open (struct inferior *inf, const char *filename,
- int flags, int mode, bool warn_if_slow, int *target_errno)
+ int flags, int mode, bool warn_if_slow, fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3296,15 +3296,15 @@ target_fileio_open (struct inferior *inf, const char *filename,
int
target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_pwrite (fh->target_fd, write_buf,
len, offset, target_errno);
@@ -3322,15 +3322,15 @@ target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
target_fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_pread (fh->target_fd, read_buf,
len, offset, target_errno);
@@ -3347,15 +3347,15 @@ target_fileio_pread (int fd, gdb_byte *read_buf, int len,
/* See target.h. */
int
-target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
+target_fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_fstat (fh->target_fd, sb, target_errno);
@@ -3369,13 +3369,13 @@ target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
/* See target.h. */
int
-target_fileio_close (int fd, int *target_errno)
+target_fileio_close (int fd, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else
{
if (fh->target != NULL)
@@ -3397,7 +3397,7 @@ target_fileio_close (int fd, int *target_errno)
int
target_fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3423,7 +3423,7 @@ target_fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
target_fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3461,7 +3461,7 @@ class scoped_target_fd
{
if (m_fd >= 0)
{
- int target_errno;
+ fileio_error target_errno;
target_fileio_close (m_fd, &target_errno);
}
@@ -3493,7 +3493,7 @@ target_fileio_read_alloc_1 (struct inferior *inf, const char *filename,
size_t buf_alloc, buf_pos;
gdb_byte *buf;
LONGEST n;
- int target_errno;
+ fileio_error target_errno;
scoped_target_fd fd (target_fileio_open (inf, filename, FILEIO_O_RDONLY,
0700, false, &target_errno));
diff --git a/gdb/target.h b/gdb/target.h
index 7e52716a9e8..0b784278c4f 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -81,6 +81,7 @@ struct inferior;
#include "command.h"
#include "disasm-flags.h"
#include "tracepoint.h"
+#include "gdbsupport/fileio.h"
#include "gdbsupport/break-common.h" /* For enum target_hw_bp_type. */
@@ -952,28 +953,28 @@ struct target_ops
*TARGET_ERRNO). */
virtual int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno);
+ fileio_error *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
(and set *TARGET_ERRNO). */
virtual int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Read up to LEN bytes FD on the target into READ_BUF.
Return the number of bytes read, or -1 if an error occurs
(and set *TARGET_ERRNO). */
virtual int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Get information about the file opened as FD and put it in
SB. Return 0 on success, or -1 if an error occurs (and set
*TARGET_ERRNO). */
- virtual int fileio_fstat (int fd, struct stat *sb, int *target_errno);
+ virtual int fileio_fstat (int fd, 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, int *target_errno);
+ virtual int fileio_close (int fd, fileio_error *target_errno);
/* Unlink FILENAME on the target, in the filesystem as seen by
INF. If INF is NULL, use the filesystem seen by the debugger
@@ -981,7 +982,7 @@ struct target_ops
-1 if an error occurs (and set *TARGET_ERRNO). */
virtual int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem
@@ -990,7 +991,7 @@ struct target_ops
occurs (and set *TARGET_ERRNO). */
virtual gdb::optional<std::string> fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Implement the "info proc" command. Returns true if the target
actually implemented the command, false otherwise. */
@@ -2165,29 +2166,29 @@ extern bool target_filesystem_is_local ();
extern int target_fileio_open (struct inferior *inf,
const char *filename, int flags,
int mode, bool warn_if_slow,
- int *target_errno);
+ fileio_error *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Read up to LEN bytes FD on the target into READ_BUF.
Return the number of bytes read, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Get information about the file opened as FD on the target
and put it in SB. Return 0 on success, or -1 if an error
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_fstat (int fd, struct stat *sb,
- int *target_errno);
+ 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, int *target_errno);
+extern int target_fileio_close (int fd, fileio_error *target_errno);
/* Unlink FILENAME on the target, in the filesystem as seen by INF.
If INF is NULL, use the filesystem seen by the debugger (GDB or,
@@ -2195,7 +2196,7 @@ extern int target_fileio_close (int fd, int *target_errno);
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem seen
@@ -2203,7 +2204,7 @@ extern int target_fileio_unlink (struct inferior *inf,
Return a null-terminated string allocated via xmalloc, or NULL if
an error occurs (and set *TARGET_ERRNO). */
extern gdb::optional<std::string> target_fileio_readlink
- (struct inferior *inf, const char *filename, int *target_errno);
+ (struct inferior *inf, const char *filename, fileio_error *target_errno);
/* Read target file FILENAME, in the filesystem as seen by INF. If
INF is NULL, use the filesystem seen by the debugger (GDB or, for
diff --git a/gdbsupport/fileio.cc b/gdbsupport/fileio.cc
index b4feb8583ab..db7c1a7c488 100644
--- a/gdbsupport/fileio.cc
+++ b/gdbsupport/fileio.cc
@@ -24,7 +24,7 @@
/* See fileio.h. */
-int
+fileio_error
host_to_fileio_error (int error)
{
switch (error)
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 9809c162314..6a5297c6433 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -67,28 +67,32 @@
#define FILEIO_SEEK_END 2
/* errno values */
-#define FILEIO_EPERM 1
-#define FILEIO_ENOENT 2
-#define FILEIO_EINTR 4
-#define FILEIO_EIO 5
-#define FILEIO_EBADF 9
-#define FILEIO_EACCES 13
-#define FILEIO_EFAULT 14
-#define FILEIO_EBUSY 16
-#define FILEIO_EEXIST 17
-#define FILEIO_ENODEV 19
-#define FILEIO_ENOTDIR 20
-#define FILEIO_EISDIR 21
-#define FILEIO_EINVAL 22
-#define FILEIO_ENFILE 23
-#define FILEIO_EMFILE 24
-#define FILEIO_EFBIG 27
-#define FILEIO_ENOSPC 28
-#define FILEIO_ESPIPE 29
-#define FILEIO_EROFS 30
-#define FILEIO_ENOSYS 88
-#define FILEIO_ENAMETOOLONG 91
-#define FILEIO_EUNKNOWN 9999
+enum fileio_error
+{
+ FILEIO_SUCCESS = 0,
+ FILEIO_EPERM = 1,
+ FILEIO_ENOENT = 2,
+ FILEIO_EINTR = 4,
+ FILEIO_EIO = 5,
+ FILEIO_EBADF = 9,
+ FILEIO_EACCES = 13,
+ FILEIO_EFAULT = 14,
+ FILEIO_EBUSY = 16,
+ FILEIO_EEXIST = 17,
+ FILEIO_ENODEV = 19,
+ FILEIO_ENOTDIR = 20,
+ FILEIO_EISDIR = 21,
+ FILEIO_EINVAL = 22,
+ FILEIO_ENFILE = 23,
+ FILEIO_EMFILE = 24,
+ FILEIO_EFBIG = 27,
+ FILEIO_ENOSPC = 28,
+ FILEIO_ESPIPE = 29,
+ FILEIO_EROFS = 30,
+ FILEIO_ENOSYS = 88,
+ FILEIO_ENAMETOOLONG = 91,
+ FILEIO_EUNKNOWN = 9999,
+};
#define FIO_INT_LEN 4
#define FIO_UINT_LEN 4
@@ -133,7 +137,7 @@ struct fio_timeval
/* Convert a host-format errno value to a File-I/O error number. */
-extern int host_to_fileio_error (int error);
+extern fileio_error host_to_fileio_error (int error);
/* Convert File-I/O open flags FFLAGS to host format, storing
the result in *FLAGS. Return 0 on success, -1 on error. */
--
2.37.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h.cc} and rename
2022-08-26 19:54 [PATCH 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
@ 2022-08-26 19:54 ` Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
2 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-26 19:54 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
We have a downstream change in ROCm-GDB to move fileio_errno_to_host to
gdbsupport/fileio.{h,cc}, so we can use it outside of gdb_bfd.c. Even
though there is nothing upstream that would need this, I think it's a
change that makes sense, that fileio_errno_to_host belongs there,
alongside host_to_fileio_error.
Rename it fileio_error_to_host, for symmetry with host_to_fileio_error.
Change-Id: Ib9b8807683de2f809c94a5303e708acc2251a0df
---
gdb/gdb_bfd.c | 53 --------------------------------------------
gdbsupport/fileio.cc | 53 ++++++++++++++++++++++++++++++++++++++++++++
gdbsupport/fileio.h | 4 ++++
3 files changed, 57 insertions(+), 53 deletions(-)
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 46e2c357e3f..f3a0afe7b26 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -302,59 +302,6 @@ gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
mem_bfd_iovec_stat);
}
-/* Return the system error number corresponding to ERRNUM. */
-
-static int
-fileio_errno_to_host (fileio_error errnum)
-{
- switch (errnum)
- {
- case FILEIO_EPERM:
- return EPERM;
- case FILEIO_ENOENT:
- return ENOENT;
- case FILEIO_EINTR:
- return EINTR;
- case FILEIO_EIO:
- return EIO;
- case FILEIO_EBADF:
- return EBADF;
- case FILEIO_EACCES:
- return EACCES;
- case FILEIO_EFAULT:
- return EFAULT;
- case FILEIO_EBUSY:
- return EBUSY;
- case FILEIO_EEXIST:
- return EEXIST;
- case FILEIO_ENODEV:
- return ENODEV;
- case FILEIO_ENOTDIR:
- return ENOTDIR;
- case FILEIO_EISDIR:
- return EISDIR;
- case FILEIO_EINVAL:
- return EINVAL;
- case FILEIO_ENFILE:
- return ENFILE;
- case FILEIO_EMFILE:
- return EMFILE;
- case FILEIO_EFBIG:
- return EFBIG;
- case FILEIO_ENOSPC:
- return ENOSPC;
- case FILEIO_ESPIPE:
- return ESPIPE;
- case FILEIO_EROFS:
- return EROFS;
- case FILEIO_ENOSYS:
- return ENOSYS;
- case FILEIO_ENAMETOOLONG:
- return ENAMETOOLONG;
- }
- return -1;
-}
-
/* bfd_openr_iovec OPEN_CLOSURE data for gdb_bfd_open. */
struct gdb_bfd_open_closure
{
diff --git a/gdbsupport/fileio.cc b/gdbsupport/fileio.cc
index db7c1a7c488..b3864e86c85 100644
--- a/gdbsupport/fileio.cc
+++ b/gdbsupport/fileio.cc
@@ -77,6 +77,59 @@ host_to_fileio_error (int error)
/* See fileio.h. */
+int
+fileio_errno_to_host (fileio_error errnum)
+{
+ switch (errnum)
+ {
+ case FILEIO_EPERM:
+ return EPERM;
+ case FILEIO_ENOENT:
+ return ENOENT;
+ case FILEIO_EINTR:
+ return EINTR;
+ case FILEIO_EIO:
+ return EIO;
+ case FILEIO_EBADF:
+ return EBADF;
+ case FILEIO_EACCES:
+ return EACCES;
+ case FILEIO_EFAULT:
+ return EFAULT;
+ case FILEIO_EBUSY:
+ return EBUSY;
+ case FILEIO_EEXIST:
+ return EEXIST;
+ case FILEIO_ENODEV:
+ return ENODEV;
+ case FILEIO_ENOTDIR:
+ return ENOTDIR;
+ case FILEIO_EISDIR:
+ return EISDIR;
+ case FILEIO_EINVAL:
+ return EINVAL;
+ case FILEIO_ENFILE:
+ return ENFILE;
+ case FILEIO_EMFILE:
+ return EMFILE;
+ case FILEIO_EFBIG:
+ return EFBIG;
+ case FILEIO_ENOSPC:
+ return ENOSPC;
+ case FILEIO_ESPIPE:
+ return ESPIPE;
+ case FILEIO_EROFS:
+ return EROFS;
+ case FILEIO_ENOSYS:
+ return ENOSYS;
+ case FILEIO_ENAMETOOLONG:
+ return ENAMETOOLONG;
+ }
+ return -1;
+}
+
+/* See fileio.h. */
+
int
fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p)
{
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 6a5297c6433..619f7e9f5e6 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -139,6 +139,10 @@ struct fio_timeval
extern fileio_error host_to_fileio_error (int error);
+/* Convert a File-I/O error number to a host-format errno value. */
+
+extern int fileio_errno_to_host (fileio_error errnum);
+
/* Convert File-I/O open flags FFLAGS to host format, storing
the result in *FLAGS. Return 0 on success, -1 on error. */
--
2.37.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 0/3] fileio error cleanups
2022-08-26 19:54 [PATCH 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h.cc} and rename Simon Marchi via Gdb-patches
@ 2022-08-29 16:29 ` Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
` (2 more replies)
2 siblings, 3 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-29 16:29 UTC (permalink / raw)
To: gdb-patches
This is a v2 of:
https://inbox.sourceware.org/gdb-patches/20220826195459.2540898-1-simon.marchi@efficios.com/
I only updated patch 3:
- The commit message claimed the function was renamed, but the code
didn't actually rename it. Now it does.
- I noticed that remote.c contained an identical fileio error to errno
function, so change remote.c to use the common function too.
Simon Marchi (3):
gdbsupport: move include/gdb/fileio.h contents to fileio.h
gdbsupport: convert FILEIO_* macros to an enum
gdbsupport: move fileio_errno_to_host to fileio.{h,cc} and rename
gdb/gdb_bfd.c | 70 +++-----------------
gdb/inf-child.c | 14 ++--
gdb/inf-child.h | 14 ++--
gdb/linux-nat.c | 6 +-
gdb/linux-nat.h | 6 +-
gdb/linux-tdep.c | 2 +-
gdb/remote.c | 139 +++++++++++++--------------------------
gdb/sparc64-tdep.c | 8 +--
gdb/target.c | 48 +++++++-------
gdb/target.h | 29 +++++----
gdbserver/hostio.cc | 2 +-
gdbserver/win32-low.cc | 2 +-
gdbsupport/fileio.cc | 55 +++++++++++++++-
gdbsupport/fileio.h | 120 +++++++++++++++++++++++++++++++++-
include/gdb/fileio.h | 144 -----------------------------------------
15 files changed, 293 insertions(+), 366 deletions(-)
delete mode 100644 include/gdb/fileio.h
base-commit: 27d582267a1d06e94661979f8893799ac235a768
--
2.37.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
@ 2022-08-29 16:29 ` Simon Marchi via Gdb-patches
2022-09-21 18:13 ` Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h, cc} and rename Simon Marchi via Gdb-patches
2 siblings, 1 reply; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-29 16:29 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
From: Simon Marchi <simon.marchi@efficios.com>
I don't see why include/gdb/fileio.h is placed there. It's not
installed by "make install", and it's not included by anything outside
of gdb/gdbserver/gdbsupport.
Move its content back to gdbsupport/fileio.h. I have omitted the bits
inside an `#if 0`, since it's obviously not used, as well as the
"limits" constants, which are also unused.
Change-Id: I6fbc2ea10fbe4cfcf15f9f76006b31b99c20e5a9
---
gdb/gdb_bfd.c | 2 +-
gdb/remote.c | 2 +-
gdb/target.c | 2 +-
gdbserver/hostio.cc | 2 +-
gdbserver/win32-low.cc | 2 +-
gdbsupport/fileio.h | 110 ++++++++++++++++++++++++++++++-
include/gdb/fileio.h | 144 -----------------------------------------
7 files changed, 114 insertions(+), 150 deletions(-)
delete mode 100644 include/gdb/fileio.h
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 6c03ae5ef053..1079623d79f7 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -30,7 +30,7 @@
#endif
#endif
#include "target.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "inferior.h"
#include "cli/cli-style.h"
diff --git a/gdb/remote.c b/gdb/remote.c
index 70f918a7362c..5bae65472ed0 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -59,7 +59,7 @@
#include "gdbcore.h"
#include "remote-fileio.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include <sys/stat.h>
#include "xml-support.h"
diff --git a/gdb/target.c b/gdb/target.c
index 41144901fc19..9d698afb09dc 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -40,7 +40,7 @@
#include "exec.h"
#include "inline-frame.h"
#include "tracepoint.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "gdbsupport/agent.h"
#include "auxv.h"
#include "target-debug.h"
diff --git a/gdbserver/hostio.cc b/gdbserver/hostio.cc
index 2d17b6d1a705..4f763f382bb0 100644
--- a/gdbserver/hostio.cc
+++ b/gdbserver/hostio.cc
@@ -19,7 +19,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "server.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "hostio.h"
#include <fcntl.h>
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 5e2c028d683e..af132f60215d 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -20,7 +20,7 @@
#include "server.h"
#include "regcache.h"
-#include "gdb/fileio.h"
+#include "gdbsupport/fileio.h"
#include "mem-break.h"
#include "win32-low.h"
#include "gdbthread.h"
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 2b4f977a0206..9809c1623140 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -20,9 +20,117 @@
#ifndef COMMON_FILEIO_H
#define COMMON_FILEIO_H
-#include "gdb/fileio.h"
#include <sys/stat.h>
+/* The following flags are defined to be independent of the host
+ as well as the target side implementation of these constants.
+ All constants are defined with a leading FILEIO_ in the name
+ to allow the usage of these constants together with the
+ corresponding implementation dependent constants in one module. */
+
+/* open(2) flags */
+#define FILEIO_O_RDONLY 0x0
+#define FILEIO_O_WRONLY 0x1
+#define FILEIO_O_RDWR 0x2
+#define FILEIO_O_APPEND 0x8
+#define FILEIO_O_CREAT 0x200
+#define FILEIO_O_TRUNC 0x400
+#define FILEIO_O_EXCL 0x800
+#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
+ FILEIO_O_RDWR | FILEIO_O_APPEND| \
+ FILEIO_O_CREAT | FILEIO_O_TRUNC| \
+ FILEIO_O_EXCL)
+
+/* mode_t bits */
+#define FILEIO_S_IFREG 0100000
+#define FILEIO_S_IFDIR 040000
+#define FILEIO_S_IFCHR 020000
+#define FILEIO_S_IRUSR 0400
+#define FILEIO_S_IWUSR 0200
+#define FILEIO_S_IXUSR 0100
+#define FILEIO_S_IRWXU 0700
+#define FILEIO_S_IRGRP 040
+#define FILEIO_S_IWGRP 020
+#define FILEIO_S_IXGRP 010
+#define FILEIO_S_IRWXG 070
+#define FILEIO_S_IROTH 04
+#define FILEIO_S_IWOTH 02
+#define FILEIO_S_IXOTH 01
+#define FILEIO_S_IRWXO 07
+#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
+ FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
+ FILEIO_S_IRWXO)
+
+/* lseek(2) flags */
+#define FILEIO_SEEK_SET 0
+#define FILEIO_SEEK_CUR 1
+#define FILEIO_SEEK_END 2
+
+/* errno values */
+#define FILEIO_EPERM 1
+#define FILEIO_ENOENT 2
+#define FILEIO_EINTR 4
+#define FILEIO_EIO 5
+#define FILEIO_EBADF 9
+#define FILEIO_EACCES 13
+#define FILEIO_EFAULT 14
+#define FILEIO_EBUSY 16
+#define FILEIO_EEXIST 17
+#define FILEIO_ENODEV 19
+#define FILEIO_ENOTDIR 20
+#define FILEIO_EISDIR 21
+#define FILEIO_EINVAL 22
+#define FILEIO_ENFILE 23
+#define FILEIO_EMFILE 24
+#define FILEIO_EFBIG 27
+#define FILEIO_ENOSPC 28
+#define FILEIO_ESPIPE 29
+#define FILEIO_EROFS 30
+#define FILEIO_ENOSYS 88
+#define FILEIO_ENAMETOOLONG 91
+#define FILEIO_EUNKNOWN 9999
+
+#define FIO_INT_LEN 4
+#define FIO_UINT_LEN 4
+#define FIO_MODE_LEN 4
+#define FIO_TIME_LEN 4
+#define FIO_LONG_LEN 8
+#define FIO_ULONG_LEN 8
+
+typedef char fio_int_t[FIO_INT_LEN];
+typedef char fio_uint_t[FIO_UINT_LEN];
+typedef char fio_mode_t[FIO_MODE_LEN];
+typedef char fio_time_t[FIO_TIME_LEN];
+typedef char fio_long_t[FIO_LONG_LEN];
+typedef char fio_ulong_t[FIO_ULONG_LEN];
+
+/* Struct stat as used in protocol. For complete independence
+ of host/target systems, it's defined as an array with offsets
+ to the members. */
+
+struct fio_stat
+{
+ fio_uint_t fst_dev;
+ fio_uint_t fst_ino;
+ fio_mode_t fst_mode;
+ fio_uint_t fst_nlink;
+ fio_uint_t fst_uid;
+ fio_uint_t fst_gid;
+ fio_uint_t fst_rdev;
+ fio_ulong_t fst_size;
+ fio_ulong_t fst_blksize;
+ fio_ulong_t fst_blocks;
+ fio_time_t fst_atime;
+ fio_time_t fst_mtime;
+ fio_time_t fst_ctime;
+};
+
+struct fio_timeval
+{
+ fio_time_t ftv_sec;
+ fio_long_t ftv_usec;
+};
+
/* Convert a host-format errno value to a File-I/O error number. */
extern int host_to_fileio_error (int error);
diff --git a/include/gdb/fileio.h b/include/gdb/fileio.h
deleted file mode 100644
index f472f828f722..000000000000
--- a/include/gdb/fileio.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Hosted File I/O interface definitions, for GDB, the GNU Debugger.
-
- Copyright (C) 2003-2022 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-#ifndef GDB_FILEIO_H_
-#define GDB_FILEIO_H_
-
-/* The following flags are defined to be independent of the host
- as well as the target side implementation of these constants.
- All constants are defined with a leading FILEIO_ in the name
- to allow the usage of these constants together with the
- corresponding implementation dependent constants in one module. */
-
-/* open(2) flags */
-#define FILEIO_O_RDONLY 0x0
-#define FILEIO_O_WRONLY 0x1
-#define FILEIO_O_RDWR 0x2
-#define FILEIO_O_APPEND 0x8
-#define FILEIO_O_CREAT 0x200
-#define FILEIO_O_TRUNC 0x400
-#define FILEIO_O_EXCL 0x800
-#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
- FILEIO_O_RDWR | FILEIO_O_APPEND| \
- FILEIO_O_CREAT | FILEIO_O_TRUNC| \
- FILEIO_O_EXCL)
-
-/* mode_t bits */
-#define FILEIO_S_IFREG 0100000
-#define FILEIO_S_IFDIR 040000
-#define FILEIO_S_IFCHR 020000
-#define FILEIO_S_IRUSR 0400
-#define FILEIO_S_IWUSR 0200
-#define FILEIO_S_IXUSR 0100
-#define FILEIO_S_IRWXU 0700
-#define FILEIO_S_IRGRP 040
-#define FILEIO_S_IWGRP 020
-#define FILEIO_S_IXGRP 010
-#define FILEIO_S_IRWXG 070
-#define FILEIO_S_IROTH 04
-#define FILEIO_S_IWOTH 02
-#define FILEIO_S_IXOTH 01
-#define FILEIO_S_IRWXO 07
-#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
- FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
- FILEIO_S_IRWXO)
-
-/* lseek(2) flags */
-#define FILEIO_SEEK_SET 0
-#define FILEIO_SEEK_CUR 1
-#define FILEIO_SEEK_END 2
-
-/* errno values */
-#define FILEIO_EPERM 1
-#define FILEIO_ENOENT 2
-#define FILEIO_EINTR 4
-#define FILEIO_EIO 5
-#define FILEIO_EBADF 9
-#define FILEIO_EACCES 13
-#define FILEIO_EFAULT 14
-#define FILEIO_EBUSY 16
-#define FILEIO_EEXIST 17
-#define FILEIO_ENODEV 19
-#define FILEIO_ENOTDIR 20
-#define FILEIO_EISDIR 21
-#define FILEIO_EINVAL 22
-#define FILEIO_ENFILE 23
-#define FILEIO_EMFILE 24
-#define FILEIO_EFBIG 27
-#define FILEIO_ENOSPC 28
-#define FILEIO_ESPIPE 29
-#define FILEIO_EROFS 30
-#define FILEIO_ENOSYS 88
-#define FILEIO_ENAMETOOLONG 91
-#define FILEIO_EUNKNOWN 9999
-
-/* limits */
-#define FILEIO_INT_MIN -2147483648L
-#define FILEIO_INT_MAX 2147483647L
-#define FILEIO_UINT_MAX 4294967295UL
-#define FILEIO_LONG_MIN -9223372036854775808LL
-#define FILEIO_LONG_MAX 9223372036854775807LL
-#define FILEIO_ULONG_MAX 18446744073709551615ULL
-
-/* Integral types as used in protocol. */
-#if 0
-typedef __int32_t fio_int_t;
-typedef __uint32_t fio_uint_t, fio_mode_t, fio_time_t;
-typedef __int64_t fio_long_t;
-typedef __uint64_t fio_ulong_t;
-#endif
-
-#define FIO_INT_LEN 4
-#define FIO_UINT_LEN 4
-#define FIO_MODE_LEN 4
-#define FIO_TIME_LEN 4
-#define FIO_LONG_LEN 8
-#define FIO_ULONG_LEN 8
-
-typedef char fio_int_t[FIO_INT_LEN];
-typedef char fio_uint_t[FIO_UINT_LEN];
-typedef char fio_mode_t[FIO_MODE_LEN];
-typedef char fio_time_t[FIO_TIME_LEN];
-typedef char fio_long_t[FIO_LONG_LEN];
-typedef char fio_ulong_t[FIO_ULONG_LEN];
-
-/* Struct stat as used in protocol. For complete independence
- of host/target systems, it's defined as an array with offsets
- to the members. */
-
-struct fio_stat {
- fio_uint_t fst_dev;
- fio_uint_t fst_ino;
- fio_mode_t fst_mode;
- fio_uint_t fst_nlink;
- fio_uint_t fst_uid;
- fio_uint_t fst_gid;
- fio_uint_t fst_rdev;
- fio_ulong_t fst_size;
- fio_ulong_t fst_blksize;
- fio_ulong_t fst_blocks;
- fio_time_t fst_atime;
- fio_time_t fst_mtime;
- fio_time_t fst_ctime;
-};
-
-struct fio_timeval {
- fio_time_t ftv_sec;
- fio_long_t ftv_usec;
-};
-
-#endif /* GDB_FILEIO_H_ */
--
2.37.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/3] gdbsupport: convert FILEIO_* macros to an enum
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
@ 2022-08-29 16:29 ` Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h, cc} and rename Simon Marchi via Gdb-patches
2 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-29 16:29 UTC (permalink / raw)
To: gdb-patches; +Cc: Simon Marchi
From: Simon Marchi <simon.marchi@efficios.com>
Converting from free-form macros to an enum gives a bit of type-safety.
This caught places where we would assign host error numbers to what
should contain a target fileio error number, for instance in
target_fileio_pread.
I added the FILEIO_SUCCESS enumerator, because
remote.c:remote_hostio_parse_result initializes the remote_errno output
variable to 0. It seems better to have an explicit enumerator than to
assign a value for which there is no enumerator. I considered
initializing this variable to FILEIO_EUNKNOWN instead, such that if the
remote side replies with an error and omits the errno value, we'll get
an errno that represents an error instead of 0 (which reprensents no
error). But it's not clear what the consequences of that change would
be, so I prefer to err on the side of caution and just keep the existing
behavior (there is no intended change in behavior with this patch).
Note that remote_hostio_parse_resul still reads blindly what the remote
side sends as a target errno into this variable, so we can still end up
with a nonsensical value here. It's not good, but out of the scope of
this patch.
Convert host_to_fileio_error and fileio_errno_to_host to return / accept
a fileio_error instead of an int, and cascade the change in the whole
chain that uses that.
Change-Id: I454b0e3fcf0732447bc872252fa8e57d138b0e03
---
gdb/gdb_bfd.c | 11 +++---
gdb/inf-child.c | 14 ++++----
gdb/inf-child.h | 14 ++++----
gdb/linux-nat.c | 6 ++--
gdb/linux-nat.h | 6 ++--
gdb/linux-tdep.c | 2 +-
gdb/remote.c | 86 +++++++++++++++++++++++---------------------
gdb/sparc64-tdep.c | 8 ++---
gdb/target.c | 46 ++++++++++++------------
gdb/target.h | 29 +++++++--------
gdbsupport/fileio.cc | 2 +-
gdbsupport/fileio.h | 50 ++++++++++++++------------
12 files changed, 142 insertions(+), 132 deletions(-)
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 1079623d79f7..46e2c357e3f4 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -305,7 +305,7 @@ gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
/* Return the system error number corresponding to ERRNUM. */
static int
-fileio_errno_to_host (int errnum)
+fileio_errno_to_host (fileio_error errnum)
{
switch (errnum)
{
@@ -369,7 +369,8 @@ static void *
gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
{
const char *filename = bfd_get_filename (abfd);
- int fd, target_errno;
+ int fd;
+ fileio_error target_errno;
int *stream;
gdb_bfd_open_closure *oclosure = (gdb_bfd_open_closure *) open_closure;
@@ -399,7 +400,7 @@ gdb_bfd_iovec_fileio_pread (struct bfd *abfd, void *stream, void *buf,
file_ptr nbytes, file_ptr offset)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
file_ptr pos, bytes;
pos = 0;
@@ -442,7 +443,7 @@ static int
gdb_bfd_iovec_fileio_close (struct bfd *abfd, void *stream)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
xfree (stream);
@@ -471,7 +472,7 @@ gdb_bfd_iovec_fileio_fstat (struct bfd *abfd, void *stream,
struct stat *sb)
{
int fd = *(int *) stream;
- int target_errno;
+ fileio_error target_errno;
int result;
result = target_fileio_fstat (fd, sb, &target_errno);
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index 56ebd2a5549c..ca0af4c1b032 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -233,7 +233,7 @@ inf_child_target::pid_to_exec_file (int pid)
int
inf_child_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
int nat_flags;
mode_t nat_mode;
@@ -257,7 +257,7 @@ inf_child_target::fileio_open (struct inferior *inf, const char *filename,
int
inf_child_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
int ret;
@@ -284,7 +284,7 @@ inf_child_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
inf_child_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
int ret;
@@ -310,7 +310,7 @@ inf_child_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
/* Implementation of to_fileio_fstat. */
int
-inf_child_target::fileio_fstat (int fd, struct stat *sb, int *target_errno)
+inf_child_target::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
int ret;
@@ -324,7 +324,7 @@ inf_child_target::fileio_fstat (int fd, struct stat *sb, int *target_errno)
/* Implementation of to_fileio_close. */
int
-inf_child_target::fileio_close (int fd, int *target_errno)
+inf_child_target::fileio_close (int fd, fileio_error *target_errno)
{
int ret;
@@ -339,7 +339,7 @@ inf_child_target::fileio_close (int fd, int *target_errno)
int
inf_child_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
int ret;
@@ -354,7 +354,7 @@ inf_child_target::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
inf_child_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
/* We support readlink only on systems that also provide a compile-time
maximum path length (PATH_MAX), at least for now. */
diff --git a/gdb/inf-child.h b/gdb/inf-child.h
index ae5ace46f30e..167820380112 100644
--- a/gdb/inf-child.h
+++ b/gdb/inf-child.h
@@ -75,19 +75,19 @@ class inf_child_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno) override;
- int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
- int fileio_close (int fd, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
+ int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno) override;
+ int fileio_close (int fd, fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string> fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
bool use_agent (bool use) override;
bool can_use_agent () override;
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index e638e8ad04ee..d4639766088c 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4372,7 +4372,7 @@ linux_nat_fileio_pid_of (struct inferior *inf)
int
linux_nat_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
int nat_flags;
mode_t nat_mode;
@@ -4397,7 +4397,7 @@ linux_nat_target::fileio_open (struct inferior *inf, const char *filename,
gdb::optional<std::string>
linux_nat_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
char buf[PATH_MAX];
int len;
@@ -4417,7 +4417,7 @@ linux_nat_target::fileio_readlink (struct inferior *inf, const char *filename,
int
linux_nat_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
int ret;
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 38e253eff364..a9b91a5e908b 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -101,16 +101,16 @@ class linux_nat_target : public inf_ptrace_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string>
fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int insert_fork_catchpoint (int) override;
int remove_fork_catchpoint (int) override;
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 5fe6be16c311..cde98e1a8c18 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -813,7 +813,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
int status_f = (what == IP_STATUS || what == IP_ALL);
int stat_f = (what == IP_STAT || what == IP_ALL);
char filename[100];
- int target_errno;
+ fileio_error target_errno;
if (args && isdigit (args[0]))
{
diff --git a/gdb/remote.c b/gdb/remote.c
index 5bae65472ed0..b57d26a70edb 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -560,26 +560,26 @@ class remote_target : public process_stratum_target
int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno) override;
+ fileio_error *target_errno) override;
int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno) override;
+ ULONGEST offset, fileio_error *target_errno) override;
- int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
+ int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno) override;
- int fileio_close (int fd, int *target_errno) override;
+ int fileio_close (int fd, fileio_error *target_errno) override;
int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
gdb::optional<std::string>
fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno) override;
+ fileio_error *target_errno) override;
bool supports_enable_disable_tracepoint () override;
@@ -701,25 +701,25 @@ class remote_target : public process_stratum_target
void remote_file_delete (const char *remote_file, int from_tty);
int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno);
+ ULONGEST offset, fileio_error *remote_errno);
int remote_hostio_send_command (int command_bytes, int which_packet,
- int *remote_errno, const char **attachment,
+ fileio_error *remote_errno, const char **attachment,
int *attachment_len);
int remote_hostio_set_filesystem (struct inferior *inf,
- int *remote_errno);
+ fileio_error *remote_errno);
/* We should get rid of this and use fileio_open directly. */
int remote_hostio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno);
- int remote_hostio_close (int fd, int *remote_errno);
+ fileio_error *remote_errno);
+ int remote_hostio_close (int fd, fileio_error *remote_errno);
int remote_hostio_unlink (inferior *inf, const char *filename,
- int *remote_errno);
+ fileio_error *remote_errno);
struct remote_state *get_remote_state ();
@@ -12130,7 +12130,7 @@ remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
}
/* Parse an I/O result packet from BUFFER. Set RETCODE to the return
- value, *REMOTE_ERRNO to the remote error number or zero if none
+ value, *REMOTE_ERRNO to the remote error number or FILEIO_SUCCESS if none
was included, and *ATTACHMENT to point to the start of the annex
if any. The length of the packet isn't needed here; there may
be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
@@ -12140,11 +12140,11 @@ remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
static int
remote_hostio_parse_result (const char *buffer, int *retcode,
- int *remote_errno, const char **attachment)
+ fileio_error *remote_errno, const char **attachment)
{
char *p, *p2;
- *remote_errno = 0;
+ *remote_errno = FILEIO_SUCCESS;
*attachment = NULL;
if (buffer[0] != 'F')
@@ -12159,7 +12159,7 @@ remote_hostio_parse_result (const char *buffer, int *retcode,
if (*p == ',')
{
errno = 0;
- *remote_errno = strtol (p + 1, &p2, 16);
+ *remote_errno = (fileio_error) strtol (p + 1, &p2, 16);
if (errno != 0 || p + 1 == p2)
return -1;
p = p2;
@@ -12196,7 +12196,7 @@ remote_hostio_parse_result (const char *buffer, int *retcode,
int
remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
- int *remote_errno, const char **attachment,
+ fileio_error *remote_errno, const char **attachment,
int *attachment_len)
{
struct remote_state *rs = get_remote_state ();
@@ -12281,7 +12281,7 @@ readahead_cache::invalidate_fd (int fd)
int
remote_target::remote_hostio_set_filesystem (struct inferior *inf,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
@@ -12318,7 +12318,7 @@ remote_target::remote_hostio_set_filesystem (struct inferior *inf,
int
remote_target::remote_hostio_open (inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12361,7 +12361,7 @@ remote_target::remote_hostio_open (inferior *inf, const char *filename,
int
remote_target::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *remote_errno)
+ fileio_error *remote_errno)
{
return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
remote_errno);
@@ -12371,7 +12371,7 @@ remote_target::fileio_open (struct inferior *inf, const char *filename,
int
remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12398,7 +12398,7 @@ remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
}
@@ -12408,7 +12408,7 @@ remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12468,7 +12468,7 @@ readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
int
remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
int ret;
struct remote_state *rs = get_remote_state ();
@@ -12508,7 +12508,7 @@ remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
int
remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *remote_errno)
+ ULONGEST offset, fileio_error *remote_errno)
{
return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
}
@@ -12516,7 +12516,7 @@ remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
/* Implementation of to_fileio_close. */
int
-remote_target::remote_hostio_close (int fd, int *remote_errno)
+remote_target::remote_hostio_close (int fd, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12533,7 +12533,7 @@ remote_target::remote_hostio_close (int fd, int *remote_errno)
}
int
-remote_target::fileio_close (int fd, int *remote_errno)
+remote_target::fileio_close (int fd, fileio_error *remote_errno)
{
return remote_hostio_close (fd, remote_errno);
}
@@ -12542,7 +12542,7 @@ remote_target::fileio_close (int fd, int *remote_errno)
int
remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12562,7 +12562,7 @@ remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
int
remote_target::fileio_unlink (struct inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
return remote_hostio_unlink (inf, filename, remote_errno);
}
@@ -12571,7 +12571,7 @@ remote_target::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
remote_target::fileio_readlink (struct inferior *inf, const char *filename,
- int *remote_errno)
+ fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12608,7 +12608,7 @@ remote_target::fileio_readlink (struct inferior *inf, const char *filename,
/* Implementation of to_fileio_fstat. */
int
-remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
+remote_target::fileio_fstat (int fd, struct stat *st, fileio_error *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf.data ();
@@ -12680,7 +12680,8 @@ remote_target::filesystem_is_local ()
if (ps == PACKET_SUPPORT_UNKNOWN)
{
- int fd, remote_errno;
+ int fd;
+ fileio_error remote_errno;
/* Try opening a file to probe support. The supplied
filename is irrelevant, we only care about whether
@@ -12715,7 +12716,7 @@ remote_target::filesystem_is_local ()
}
static int
-remote_fileio_errno_to_host (int errnum)
+remote_fileio_errno_to_host (fileio_error errnum)
{
switch (errnum)
{
@@ -12766,7 +12767,7 @@ remote_fileio_errno_to_host (int errnum)
}
static char *
-remote_hostio_error (int errnum)
+remote_hostio_error (fileio_error errnum)
{
int host_error = remote_fileio_errno_to_host (errnum);
@@ -12792,7 +12793,7 @@ class scoped_remote_fd
{
try
{
- int remote_errno;
+ fileio_error remote_errno;
m_remote->remote_hostio_close (m_fd, &remote_errno);
}
catch (...)
@@ -12843,7 +12844,8 @@ void
remote_target::remote_file_put (const char *local_file, const char *remote_file,
int from_tty)
{
- int retcode, remote_errno, bytes, io_size;
+ int retcode, bytes, io_size;
+ fileio_error remote_errno;
int bytes_in_buffer;
int saw_eof;
ULONGEST offset;
@@ -12935,7 +12937,8 @@ void
remote_target::remote_file_get (const char *remote_file, const char *local_file,
int from_tty)
{
- int remote_errno, bytes, io_size;
+ fileio_error remote_errno;
+ int bytes, io_size;
ULONGEST offset;
scoped_remote_fd fd
@@ -12993,7 +12996,8 @@ remote_file_delete (const char *remote_file, int from_tty)
void
remote_target::remote_file_delete (const char *remote_file, int from_tty)
{
- int retcode, remote_errno;
+ int retcode;
+ fileio_error remote_errno;
retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
if (retcode == -1)
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 5ca5f2dca8c7..3842bf5a5567 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -166,7 +166,7 @@ get_adi_info (pid_t pid)
void
sparc64_forget_process (pid_t pid)
{
- int target_errno;
+ fileio_error target_errno;
for (auto pit = adi_proc_list.before_begin (),
it = std::next (pit);
@@ -287,7 +287,7 @@ adi_tag_fd (void)
char cl_name[MAX_PROC_NAME_SIZE];
snprintf (cl_name, sizeof(cl_name), "/proc/%ld/adi/tags", (long) pid);
- int target_errno;
+ fileio_error target_errno;
proc->stat.tag_fd = target_fileio_open (NULL, cl_name, O_RDWR|O_EXCL,
false, 0, &target_errno);
return proc->stat.tag_fd;
@@ -350,7 +350,7 @@ adi_read_versions (CORE_ADDR vaddr, size_t size, gdb_byte *tags)
paddress (target_gdbarch (), vaddr * ast.blksize));
}
- int target_errno;
+ fileio_error target_errno;
return target_fileio_pread (fd, tags, size, vaddr, &target_errno);
}
@@ -371,7 +371,7 @@ adi_write_versions (CORE_ADDR vaddr, size_t size, unsigned char *tags)
paddress (target_gdbarch (), vaddr * ast.blksize));
}
- int target_errno;
+ fileio_error target_errno;
return target_fileio_pwrite (fd, tags, size, vaddr, &target_errno);
}
diff --git a/gdb/target.c b/gdb/target.c
index 9d698afb09dc..28560983625b 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3206,7 +3206,7 @@ fileio_fd_to_fh (int fd)
int
target_ops::fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3214,7 +3214,7 @@ target_ops::fileio_open (struct inferior *inf, const char *filename,
int
target_ops::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3222,21 +3222,21 @@ target_ops::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
target_ops::fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
}
int
-target_ops::fileio_fstat (int fd, struct stat *sb, int *target_errno)
+target_ops::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
}
int
-target_ops::fileio_close (int fd, int *target_errno)
+target_ops::fileio_close (int fd, fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3244,7 +3244,7 @@ target_ops::fileio_close (int fd, int *target_errno)
int
target_ops::fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return -1;
@@ -3252,7 +3252,7 @@ target_ops::fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
target_ops::fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
*target_errno = FILEIO_ENOSYS;
return {};
@@ -3262,7 +3262,7 @@ target_ops::fileio_readlink (struct inferior *inf, const char *filename,
int
target_fileio_open (struct inferior *inf, const char *filename,
- int flags, int mode, bool warn_if_slow, int *target_errno)
+ int flags, int mode, bool warn_if_slow, fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3296,15 +3296,15 @@ target_fileio_open (struct inferior *inf, const char *filename,
int
target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_pwrite (fh->target_fd, write_buf,
len, offset, target_errno);
@@ -3322,15 +3322,15 @@ target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
int
target_fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno)
+ ULONGEST offset, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_pread (fh->target_fd, read_buf,
len, offset, target_errno);
@@ -3347,15 +3347,15 @@ target_fileio_pread (int fd, gdb_byte *read_buf, int len,
/* See target.h. */
int
-target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
+target_fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else if (fh->target == NULL)
- *target_errno = EIO;
+ *target_errno = FILEIO_EIO;
else
ret = fh->target->fileio_fstat (fh->target_fd, sb, target_errno);
@@ -3369,13 +3369,13 @@ target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
/* See target.h. */
int
-target_fileio_close (int fd, int *target_errno)
+target_fileio_close (int fd, fileio_error *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (fh->is_closed ())
- *target_errno = EBADF;
+ *target_errno = FILEIO_EBADF;
else
{
if (fh->target != NULL)
@@ -3397,7 +3397,7 @@ target_fileio_close (int fd, int *target_errno)
int
target_fileio_unlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3423,7 +3423,7 @@ target_fileio_unlink (struct inferior *inf, const char *filename,
gdb::optional<std::string>
target_fileio_readlink (struct inferior *inf, const char *filename,
- int *target_errno)
+ fileio_error *target_errno)
{
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
{
@@ -3461,7 +3461,7 @@ class scoped_target_fd
{
if (m_fd >= 0)
{
- int target_errno;
+ fileio_error target_errno;
target_fileio_close (m_fd, &target_errno);
}
@@ -3493,7 +3493,7 @@ target_fileio_read_alloc_1 (struct inferior *inf, const char *filename,
size_t buf_alloc, buf_pos;
gdb_byte *buf;
LONGEST n;
- int target_errno;
+ fileio_error target_errno;
scoped_target_fd fd (target_fileio_open (inf, filename, FILEIO_O_RDONLY,
0700, false, &target_errno));
diff --git a/gdb/target.h b/gdb/target.h
index 7e52716a9e83..0b784278c4f8 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -81,6 +81,7 @@ struct inferior;
#include "command.h"
#include "disasm-flags.h"
#include "tracepoint.h"
+#include "gdbsupport/fileio.h"
#include "gdbsupport/break-common.h" /* For enum target_hw_bp_type. */
@@ -952,28 +953,28 @@ struct target_ops
*TARGET_ERRNO). */
virtual int fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int warn_if_slow,
- int *target_errno);
+ fileio_error *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
(and set *TARGET_ERRNO). */
virtual int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Read up to LEN bytes FD on the target into READ_BUF.
Return the number of bytes read, or -1 if an error occurs
(and set *TARGET_ERRNO). */
virtual int fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Get information about the file opened as FD and put it in
SB. Return 0 on success, or -1 if an error occurs (and set
*TARGET_ERRNO). */
- virtual int fileio_fstat (int fd, struct stat *sb, int *target_errno);
+ virtual int fileio_fstat (int fd, 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, int *target_errno);
+ virtual int fileio_close (int fd, fileio_error *target_errno);
/* Unlink FILENAME on the target, in the filesystem as seen by
INF. If INF is NULL, use the filesystem seen by the debugger
@@ -981,7 +982,7 @@ struct target_ops
-1 if an error occurs (and set *TARGET_ERRNO). */
virtual int fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem
@@ -990,7 +991,7 @@ struct target_ops
occurs (and set *TARGET_ERRNO). */
virtual gdb::optional<std::string> fileio_readlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Implement the "info proc" command. Returns true if the target
actually implemented the command, false otherwise. */
@@ -2165,29 +2166,29 @@ extern bool target_filesystem_is_local ();
extern int target_fileio_open (struct inferior *inf,
const char *filename, int flags,
int mode, bool warn_if_slow,
- int *target_errno);
+ fileio_error *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Read up to LEN bytes FD on the target into READ_BUF.
Return the number of bytes read, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
- ULONGEST offset, int *target_errno);
+ ULONGEST offset, fileio_error *target_errno);
/* Get information about the file opened as FD on the target
and put it in SB. Return 0 on success, or -1 if an error
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_fstat (int fd, struct stat *sb,
- int *target_errno);
+ 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, int *target_errno);
+extern int target_fileio_close (int fd, fileio_error *target_errno);
/* Unlink FILENAME on the target, in the filesystem as seen by INF.
If INF is NULL, use the filesystem seen by the debugger (GDB or,
@@ -2195,7 +2196,7 @@ extern int target_fileio_close (int fd, int *target_errno);
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_unlink (struct inferior *inf,
const char *filename,
- int *target_errno);
+ fileio_error *target_errno);
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem seen
@@ -2203,7 +2204,7 @@ extern int target_fileio_unlink (struct inferior *inf,
Return a null-terminated string allocated via xmalloc, or NULL if
an error occurs (and set *TARGET_ERRNO). */
extern gdb::optional<std::string> target_fileio_readlink
- (struct inferior *inf, const char *filename, int *target_errno);
+ (struct inferior *inf, const char *filename, fileio_error *target_errno);
/* Read target file FILENAME, in the filesystem as seen by INF. If
INF is NULL, use the filesystem seen by the debugger (GDB or, for
diff --git a/gdbsupport/fileio.cc b/gdbsupport/fileio.cc
index b4feb8583ab0..db7c1a7c488d 100644
--- a/gdbsupport/fileio.cc
+++ b/gdbsupport/fileio.cc
@@ -24,7 +24,7 @@
/* See fileio.h. */
-int
+fileio_error
host_to_fileio_error (int error)
{
switch (error)
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 9809c1623140..6a5297c64330 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -67,28 +67,32 @@
#define FILEIO_SEEK_END 2
/* errno values */
-#define FILEIO_EPERM 1
-#define FILEIO_ENOENT 2
-#define FILEIO_EINTR 4
-#define FILEIO_EIO 5
-#define FILEIO_EBADF 9
-#define FILEIO_EACCES 13
-#define FILEIO_EFAULT 14
-#define FILEIO_EBUSY 16
-#define FILEIO_EEXIST 17
-#define FILEIO_ENODEV 19
-#define FILEIO_ENOTDIR 20
-#define FILEIO_EISDIR 21
-#define FILEIO_EINVAL 22
-#define FILEIO_ENFILE 23
-#define FILEIO_EMFILE 24
-#define FILEIO_EFBIG 27
-#define FILEIO_ENOSPC 28
-#define FILEIO_ESPIPE 29
-#define FILEIO_EROFS 30
-#define FILEIO_ENOSYS 88
-#define FILEIO_ENAMETOOLONG 91
-#define FILEIO_EUNKNOWN 9999
+enum fileio_error
+{
+ FILEIO_SUCCESS = 0,
+ FILEIO_EPERM = 1,
+ FILEIO_ENOENT = 2,
+ FILEIO_EINTR = 4,
+ FILEIO_EIO = 5,
+ FILEIO_EBADF = 9,
+ FILEIO_EACCES = 13,
+ FILEIO_EFAULT = 14,
+ FILEIO_EBUSY = 16,
+ FILEIO_EEXIST = 17,
+ FILEIO_ENODEV = 19,
+ FILEIO_ENOTDIR = 20,
+ FILEIO_EISDIR = 21,
+ FILEIO_EINVAL = 22,
+ FILEIO_ENFILE = 23,
+ FILEIO_EMFILE = 24,
+ FILEIO_EFBIG = 27,
+ FILEIO_ENOSPC = 28,
+ FILEIO_ESPIPE = 29,
+ FILEIO_EROFS = 30,
+ FILEIO_ENOSYS = 88,
+ FILEIO_ENAMETOOLONG = 91,
+ FILEIO_EUNKNOWN = 9999,
+};
#define FIO_INT_LEN 4
#define FIO_UINT_LEN 4
@@ -133,7 +137,7 @@ struct fio_timeval
/* Convert a host-format errno value to a File-I/O error number. */
-extern int host_to_fileio_error (int error);
+extern fileio_error host_to_fileio_error (int error);
/* Convert File-I/O open flags FFLAGS to host format, storing
the result in *FLAGS. Return 0 on success, -1 on error. */
--
2.37.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h, cc} and rename
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
@ 2022-08-29 16:29 ` Simon Marchi via Gdb-patches
2 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-08-29 16:29 UTC (permalink / raw)
To: gdb-patches
gdb_bfd.c and remote.c contain identical implementations of a
fileio_error -> errno function. Factor that out to
gdbsupport/fileio.{h,cc}.
Rename it fileio_error_to_host, for symmetry with host_to_fileio_error.
Change-Id: Ib9b8807683de2f809c94a5303e708acc2251a0df
---
gdb/gdb_bfd.c | 59 +++-----------------------------------------
gdb/remote.c | 53 +--------------------------------------
gdbsupport/fileio.cc | 53 +++++++++++++++++++++++++++++++++++++++
gdbsupport/fileio.h | 4 +++
4 files changed, 61 insertions(+), 108 deletions(-)
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 46e2c357e3f4..58244708eb07 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -302,59 +302,6 @@ gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
mem_bfd_iovec_stat);
}
-/* Return the system error number corresponding to ERRNUM. */
-
-static int
-fileio_errno_to_host (fileio_error errnum)
-{
- switch (errnum)
- {
- case FILEIO_EPERM:
- return EPERM;
- case FILEIO_ENOENT:
- return ENOENT;
- case FILEIO_EINTR:
- return EINTR;
- case FILEIO_EIO:
- return EIO;
- case FILEIO_EBADF:
- return EBADF;
- case FILEIO_EACCES:
- return EACCES;
- case FILEIO_EFAULT:
- return EFAULT;
- case FILEIO_EBUSY:
- return EBUSY;
- case FILEIO_EEXIST:
- return EEXIST;
- case FILEIO_ENODEV:
- return ENODEV;
- case FILEIO_ENOTDIR:
- return ENOTDIR;
- case FILEIO_EISDIR:
- return EISDIR;
- case FILEIO_EINVAL:
- return EINVAL;
- case FILEIO_ENFILE:
- return ENFILE;
- case FILEIO_EMFILE:
- return EMFILE;
- case FILEIO_EFBIG:
- return EFBIG;
- case FILEIO_ENOSPC:
- return ENOSPC;
- case FILEIO_ESPIPE:
- return ESPIPE;
- case FILEIO_EROFS:
- return EROFS;
- case FILEIO_ENOSYS:
- return ENOSYS;
- case FILEIO_ENAMETOOLONG:
- return ENAMETOOLONG;
- }
- return -1;
-}
-
/* bfd_openr_iovec OPEN_CLOSURE data for gdb_bfd_open. */
struct gdb_bfd_open_closure
{
@@ -382,7 +329,7 @@ gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
&target_errno);
if (fd == -1)
{
- errno = fileio_errno_to_host (target_errno);
+ errno = fileio_error_to_host (target_errno);
bfd_set_error (bfd_error_system_call);
return NULL;
}
@@ -416,7 +363,7 @@ gdb_bfd_iovec_fileio_pread (struct bfd *abfd, void *stream, void *buf,
break;
if (bytes == -1)
{
- errno = fileio_errno_to_host (target_errno);
+ errno = fileio_error_to_host (target_errno);
bfd_set_error (bfd_error_system_call);
return -1;
}
@@ -478,7 +425,7 @@ gdb_bfd_iovec_fileio_fstat (struct bfd *abfd, void *stream,
result = target_fileio_fstat (fd, sb, &target_errno);
if (result == -1)
{
- errno = fileio_errno_to_host (target_errno);
+ errno = fileio_error_to_host (target_errno);
bfd_set_error (bfd_error_system_call);
}
diff --git a/gdb/remote.c b/gdb/remote.c
index b57d26a70edb..2f6cb2d01eeb 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -12715,61 +12715,10 @@ remote_target::filesystem_is_local ()
return false;
}
-static int
-remote_fileio_errno_to_host (fileio_error errnum)
-{
- switch (errnum)
- {
- case FILEIO_EPERM:
- return EPERM;
- case FILEIO_ENOENT:
- return ENOENT;
- case FILEIO_EINTR:
- return EINTR;
- case FILEIO_EIO:
- return EIO;
- case FILEIO_EBADF:
- return EBADF;
- case FILEIO_EACCES:
- return EACCES;
- case FILEIO_EFAULT:
- return EFAULT;
- case FILEIO_EBUSY:
- return EBUSY;
- case FILEIO_EEXIST:
- return EEXIST;
- case FILEIO_ENODEV:
- return ENODEV;
- case FILEIO_ENOTDIR:
- return ENOTDIR;
- case FILEIO_EISDIR:
- return EISDIR;
- case FILEIO_EINVAL:
- return EINVAL;
- case FILEIO_ENFILE:
- return ENFILE;
- case FILEIO_EMFILE:
- return EMFILE;
- case FILEIO_EFBIG:
- return EFBIG;
- case FILEIO_ENOSPC:
- return ENOSPC;
- case FILEIO_ESPIPE:
- return ESPIPE;
- case FILEIO_EROFS:
- return EROFS;
- case FILEIO_ENOSYS:
- return ENOSYS;
- case FILEIO_ENAMETOOLONG:
- return ENAMETOOLONG;
- }
- return -1;
-}
-
static char *
remote_hostio_error (fileio_error errnum)
{
- int host_error = remote_fileio_errno_to_host (errnum);
+ int host_error = fileio_error_to_host (errnum);
if (host_error == -1)
error (_("Unknown remote I/O error %d"), errnum);
diff --git a/gdbsupport/fileio.cc b/gdbsupport/fileio.cc
index db7c1a7c488d..60a08f649770 100644
--- a/gdbsupport/fileio.cc
+++ b/gdbsupport/fileio.cc
@@ -77,6 +77,59 @@ host_to_fileio_error (int error)
/* See fileio.h. */
+int
+fileio_error_to_host (fileio_error errnum)
+{
+ switch (errnum)
+ {
+ case FILEIO_EPERM:
+ return EPERM;
+ case FILEIO_ENOENT:
+ return ENOENT;
+ case FILEIO_EINTR:
+ return EINTR;
+ case FILEIO_EIO:
+ return EIO;
+ case FILEIO_EBADF:
+ return EBADF;
+ case FILEIO_EACCES:
+ return EACCES;
+ case FILEIO_EFAULT:
+ return EFAULT;
+ case FILEIO_EBUSY:
+ return EBUSY;
+ case FILEIO_EEXIST:
+ return EEXIST;
+ case FILEIO_ENODEV:
+ return ENODEV;
+ case FILEIO_ENOTDIR:
+ return ENOTDIR;
+ case FILEIO_EISDIR:
+ return EISDIR;
+ case FILEIO_EINVAL:
+ return EINVAL;
+ case FILEIO_ENFILE:
+ return ENFILE;
+ case FILEIO_EMFILE:
+ return EMFILE;
+ case FILEIO_EFBIG:
+ return EFBIG;
+ case FILEIO_ENOSPC:
+ return ENOSPC;
+ case FILEIO_ESPIPE:
+ return ESPIPE;
+ case FILEIO_EROFS:
+ return EROFS;
+ case FILEIO_ENOSYS:
+ return ENOSYS;
+ case FILEIO_ENAMETOOLONG:
+ return ENAMETOOLONG;
+ }
+ return -1;
+}
+
+/* See fileio.h. */
+
int
fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p)
{
diff --git a/gdbsupport/fileio.h b/gdbsupport/fileio.h
index 6a5297c64330..203e671f3e73 100644
--- a/gdbsupport/fileio.h
+++ b/gdbsupport/fileio.h
@@ -139,6 +139,10 @@ struct fio_timeval
extern fileio_error host_to_fileio_error (int error);
+/* Convert a File-I/O error number to a host-format errno value. */
+
+extern int fileio_error_to_host (fileio_error errnum);
+
/* Convert File-I/O open flags FFLAGS to host format, storing
the result in *FLAGS. Return 0 on success, -1 on error. */
--
2.37.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h
2022-08-29 16:29 ` [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
@ 2022-09-21 18:13 ` Simon Marchi via Gdb-patches
0 siblings, 0 replies; 8+ messages in thread
From: Simon Marchi via Gdb-patches @ 2022-09-21 18:13 UTC (permalink / raw)
To: Simon Marchi, gdb-patches; +Cc: Simon Marchi
On 2022-08-29 12:29, Simon Marchi via Gdb-patches wrote:
> From: Simon Marchi <simon.marchi@efficios.com>
>
> I don't see why include/gdb/fileio.h is placed there. It's not
> installed by "make install", and it's not included by anything outside
> of gdb/gdbserver/gdbsupport.
>
> Move its content back to gdbsupport/fileio.h. I have omitted the bits
> inside an `#if 0`, since it's obviously not used, as well as the
> "limits" constants, which are also unused.
>
> Change-Id: I6fbc2ea10fbe4cfcf15f9f76006b31b99c20e5a9
I pushed this series.
Simon
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-09-21 18:13 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-26 19:54 [PATCH 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
2022-08-26 19:54 ` [PATCH 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h.cc} and rename Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 0/3] fileio error cleanups Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 1/3] gdbsupport: move include/gdb/fileio.h contents to fileio.h Simon Marchi via Gdb-patches
2022-09-21 18:13 ` Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 2/3] gdbsupport: convert FILEIO_* macros to an enum Simon Marchi via Gdb-patches
2022-08-29 16:29 ` [PATCH v2 3/3] gdbsupport: move fileio_errno_to_host to fileio.{h, cc} and rename Simon Marchi via Gdb-patches
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox