[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 12/22] bsd-user/freebsd/os-syscall.c: Add get_errno and host_
|
From: |
Kyle Evans |
|
Subject: |
Re: [PATCH 12/22] bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno |
|
Date: |
Tue, 1 Feb 2022 10:35:48 -0600 |
On Tue, Feb 1, 2022 at 5:15 AM Warner Losh <imp@bsdimp.com> wrote:
>
> 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>
> ---
> bsd-user/freebsd/os-syscall.c | 23 +++++++++++++++++++++++
> bsd-user/qemu.h | 3 ++-
> 2 files changed, 25 insertions(+), 1 deletion(-)
>
Reviewed-by: Kyle Evans <kevans@FreeBSD.org>
> diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c
> index 7e2bedb918d..2e84cf350b1 100644
> --- a/bsd-user/freebsd/os-syscall.c
> +++ b/bsd-user/freebsd/os-syscall.c
> @@ -44,6 +44,29 @@ 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)
> {
>
> 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
>
- Re: [PATCH 09/22] bsd-user/freebsd/os-syscall.c: Move syscall processing here, (continued)
- [PATCH 03/22] bsd-user/x86_64/target_arch_cpu.h: Remove openbsd syscall, Warner Losh, 2022/02/01
- [PATCH 11/22] bsd-user/sycall.c: Now obsolete, remove, Warner Losh, 2022/02/01
- [PATCH 12/22] bsd-user/freebsd/os-syscall.c: Add get_errno and host_to_target_errno, Warner Losh, 2022/02/01
- [PATCH 13/22] bsd-user/bsd-file.h: Implementation details for the filesystem calls, Warner Losh, 2022/02/01
- [PATCH 15/22] bsd-user/freebsd/os-syscall.c: unlock_iovec, Warner Losh, 2022/02/01