On Wed, Nov 10, 2021 at 9:59 AM Richard Henderson <
richard.hender...@linaro.org> wrote:

> On 11/10/21 5:31 PM, Warner Losh wrote:
> > All the *-users generally use the Linux style of negative return codes
> > for errno. FreeBSD returns errno, not -errno. Add ifdefs for FreeBSD to
> > make the adjustment on the 4 hosts that we have support for.
> >
> > Signed-off-by: Warner Losh <i...@bsdimp.com>
> > ---
> >   common-user/host/aarch64/safe-syscall.inc.S | 5 +++++
> >   common-user/host/arm/safe-syscall.inc.S     | 5 +++++
> >   common-user/host/i386/safe-syscall.inc.S    | 5 +++++
> >   common-user/host/x86_64/safe-syscall.inc.S  | 5 +++++
> >   4 files changed, 20 insertions(+)
> >
> > diff --git a/common-user/host/aarch64/safe-syscall.inc.S
> b/common-user/host/aarch64/safe-syscall.inc.S
> > index bc1f5a9792..6584950ccf 100644
> > --- a/common-user/host/aarch64/safe-syscall.inc.S
> > +++ b/common-user/host/aarch64/safe-syscall.inc.S
> > @@ -64,6 +64,11 @@ safe_syscall_start:
> >       svc     0x0
> >   safe_syscall_end:
> >       /* code path for having successfully executed the syscall */
> > +#ifdef __FreeBSD__
> > +        b.cc    2f              /* Convert to Linux -ERRNO convention */
> > +        neg     x0, x0
> > +2:
> > +#endif
>
> I think it should be a little odd to mention Linux.
>

Yea, from my view of hacking on Unix and Unix-derived systems for the
last 30 years, Linux is the outlier in returning -errno. However, the
'norms'
have shifted, I guess, so I'm happy with your suggestion...


> How about
>
>      /*
>       * FreeBSD kernel returns C bit set with positive errno.
>       * Encode this for use in bsd-user as -errno:
>       *    x0 = !c ? x0 : -x0
>       */
>      csneg  x0, x0, x0, cc
>

Ah, better assembler. Good!


>
> > +++ b/common-user/host/arm/safe-syscall.inc.S
> > @@ -78,6 +78,11 @@ safe_syscall_start:
> >       swi     0
> >   safe_syscall_end:
> >       /* code path for having successfully executed the syscall */
> > +#ifdef __FreeBSD__
> > +        bcc     2f
> > +        neg     r0, r0
>
>         negcs   r0, r0
>
> I just can't help myself.  :-)


I can relate... Really :)

I'll rework and resend in the next round.

Warner

Reply via email to