mirror of https://github.com/xemu-project/xemu.git
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:
parent
304f944e51
commit
deeff83b47
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue