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 ret 0: diff --git a/common-user/host/arm/safe-syscall.inc.S b/common-user/host/arm/safe-syscall.inc.S index 88c4958504..85c47387f9 100644 --- a/common-user/host/arm/safe-syscall.inc.S +++ 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 +2: +#endif pop { r4, r5, r6, r7, r8, pc } 1: diff --git a/common-user/host/i386/safe-syscall.inc.S b/common-user/host/i386/safe-syscall.inc.S index 9e58fc6504..7bb6a98a8b 100644 --- a/common-user/host/i386/safe-syscall.inc.S +++ b/common-user/host/i386/safe-syscall.inc.S @@ -75,6 +75,11 @@ safe_syscall_start: int $0x80 safe_syscall_end: /* code path for having successfully executed the syscall */ +#ifdef __FreeBSD__ + jnb 2f /* Convert to Linux -ERRNO convention */ + neg %eax +2: +#endif pop %ebx .cfi_remember_state .cfi_adjust_cfa_offset -4 diff --git a/common-user/host/x86_64/safe-syscall.inc.S b/common-user/host/x86_64/safe-syscall.inc.S index f36992daa3..7d8792c7ef 100644 --- a/common-user/host/x86_64/safe-syscall.inc.S +++ b/common-user/host/x86_64/safe-syscall.inc.S @@ -72,6 +72,11 @@ safe_syscall_start: syscall safe_syscall_end: /* code path for having successfully executed the syscall */ +#ifdef __FreeBSD__ + jnb 2f /* Convert to Linux -ERRNO convention */ + neg %rax +2: +#endif pop %rbp .cfi_remember_state .cfi_def_cfa_offset 8 -- 2.33.0