mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-30 22:03:54 -06:00
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
2 changed files with 24 additions and 2 deletions
|
@ -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)
|
bool is_error(abi_long ret)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (abi_ulong)ret >= (abi_ulong)(-4096);
|
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_maxssiz;
|
||||||
extern unsigned long target_sgrowsiz;
|
extern unsigned long target_sgrowsiz;
|
||||||
|
|
||||||
/* syscall.c */
|
/* os-syscall.c */
|
||||||
abi_long get_errno(abi_long ret);
|
abi_long get_errno(abi_long ret);
|
||||||
bool is_error(abi_long ret);
|
bool is_error(abi_long ret);
|
||||||
|
int host_to_target_errno(int err);
|
||||||
|
|
||||||
/* os-sys.c */
|
/* os-sys.c */
|
||||||
abi_long do_freebsd_sysarch(void *cpu_env, abi_long arg1, abi_long arg2);
|
abi_long do_freebsd_sysarch(void *cpu_env, abi_long arg1, abi_long arg2);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue