bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno

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>
This commit is contained in:
Warner Losh 2022-01-31 13:19:44 -07:00
parent 304f944e51
commit deeff83b47
2 changed files with 24 additions and 2 deletions

View File

@ -45,9 +45,30 @@ void target_set_brk(abi_ulong new_brk)
{
}
/*
* 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);
}

View 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);