]> git.proxmox.com Git - mirror_qemu.git/commitdiff
bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno
authorWarner Losh <imp@bsdimp.com>
Mon, 31 Jan 2022 20:19:44 +0000 (13:19 -0700)
committerWarner Losh <imp@bsdimp.com>
Sat, 26 Feb 2022 17:01:38 +0000 (10:01 -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
bsd-user/qemu.h

index fc57e32417333883ee65540c2ffad58a7fa1b4bd..597a41c2f5099fea8ce634489db7d5758df0fbfa 100644 (file)
@@ -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);
 }
 
index e5742bd6c0357190bf088aea483f1b296600c857..56042ddbc5d0e68a3b7d0da4f75fd6e4abd0d88f 100644 (file)
@@ -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);