[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 12/16] bsd-user/freebsd/os-syscall.c: Add get_errno and host_t
From: |
Warner Losh |
Subject: |
[PATCH v2 12/16] bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno |
Date: |
Sat, 26 Feb 2022 10:07:40 -0700 |
Add the helper functions get_errno and host_to_target_errno. get_errno
returns either the system call results, or the -errno when system call
indicates failure by returning -1. Host_to_target_errno returns errno
(since on FreeBSD they are the same on all architectures) along with a
comment about why it's the identity.
Signed-off-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Kyle Evans <kevans@FreeBSD.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
bsd-user/freebsd/os-syscall.c | 23 ++++++++++++++++++++++-
bsd-user/qemu.h | 3 ++-
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c
index fc57e324173..597a41c2f50 100644
--- a/bsd-user/freebsd/os-syscall.c
+++ b/bsd-user/freebsd/os-syscall.c
@@ -45,9 +45,30 @@ void target_set_brk(abi_ulong new_brk)
{
}
-bool is_error(abi_long ret)
+/*
+ * errno conversion.
+ */
+abi_long get_errno(abi_long ret)
{
+ if (ret == -1) {
+ return -host_to_target_errno(errno);
+ } else {
+ return ret;
+ }
+}
+int host_to_target_errno(int err)
+{
+ /*
+ * All the BSDs have the property that the error numbers are uniform across
+ * all architectures for a given BSD, though they may vary between
different
+ * BSDs.
+ */
+ return err;
+}
+
+bool is_error(abi_long ret)
+{
return (abi_ulong)ret >= (abi_ulong)(-4096);
}
diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h
index e5742bd6c03..56042ddbc5d 100644
--- a/bsd-user/qemu.h
+++ b/bsd-user/qemu.h
@@ -246,9 +246,10 @@ extern unsigned long target_dflssiz;
extern unsigned long target_maxssiz;
extern unsigned long target_sgrowsiz;
-/* syscall.c */
+/* os-syscall.c */
abi_long get_errno(abi_long ret);
bool is_error(abi_long ret);
+int host_to_target_errno(int err);
/* os-sys.c */
abi_long do_freebsd_sysarch(void *cpu_env, abi_long arg1, abi_long arg2);
--
2.33.1
- [PATCH v2 00/16] bsd-user: Start upstreaming the system calls., Warner Losh, 2022/02/26
- [PATCH v2 01/16] bsd-user/main.c: Drop syscall flavor arg -bsd, Warner Losh, 2022/02/26
- [PATCH v2 02/16] bsd-user/x86_64/target_arch_cpu.h: int $80 never was a BSD system call on amd64, Warner Losh, 2022/02/26
- [PATCH v2 03/16] bsd-user/x86_64/target_arch_cpu.h: Remove openbsd syscall, Warner Losh, 2022/02/26
- [PATCH v2 04/16] bsd-user/i386/target_arch_cpu.h: Remove openbsd syscall, Warner Losh, 2022/02/26
- [PATCH v2 05/16] bsd-user/arm/target_arch_cpu.h: Only support FreeBSD sys calls, Warner Losh, 2022/02/26
- [PATCH v2 06/16] bsd-user/arm/target_arch_thread.h: Assume a FreeBSD target, Warner Losh, 2022/02/26
- [PATCH v2 07/16] bsd-user/x86_64/target_arch_thread.h: Assume a FreeBSD target, Warner Losh, 2022/02/26
- [PATCH v2 09/16] bsd-user/freebsd/os-syscall.c: Move syscall processing here, Warner Losh, 2022/02/26
- [PATCH v2 12/16] bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno,
Warner Losh <=
- [PATCH v2 08/16] bsd-user: Remove bsd_type, Warner Losh, 2022/02/26
- [PATCH v2 10/16] bsd-user: Move system call building to os-syscall.c, Warner Losh, 2022/02/26
- [PATCH v2 13/16] bsd-user/bsd-file.h: Implementation details for the filesystem calls, Warner Losh, 2022/02/26
- [PATCH v2 14/16] bsd-user: introduce target.h, Warner Losh, 2022/02/26
- [PATCH v2 16/16] bsd-user: Add safe system call macros, Warner Losh, 2022/02/26
- [PATCH v2 11/16] bsd-user/sycall.c: Now obsolete, remove, Warner Losh, 2022/02/26
- [PATCH v2 15/16] bsd-user: Define target_arg64, Warner Losh, 2022/02/26