Message ID | 20220201111455.52511-13-imp@bsdimp.com |
---|---|
State | New |
Headers | show |
Series | bsd-user: Start upstreaming the system calls. | expand |
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 >
On 2/1/22 22:14, Warner Losh wrote: > +/* > + * errno conversion. > + */ > +abi_long get_errno(abi_long ret) > +{ > + > + if (ret == -1) { Watch the extra blank lines. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On Tue, Feb 1, 2022 at 10:40 AM Richard Henderson < richard.henderson@linaro.org> wrote: > On 2/1/22 22:14, Warner Losh wrote: > > +/* > > + * errno conversion. > > + */ > > +abi_long get_errno(abi_long ret) > > +{ > > + > > + if (ret == -1) { > > Watch the extra blank lines. > Will do. It's a FreeBSD fetish that has infected this code... :) > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > Thanks! Warner > > > r~ >
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);
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(-)