All of lore.kernel.org
 help / color / mirror / Atom feed
From: Warner Losh <imp@bsdimp.com>
To: qemu-devel@nongnu.org
Cc: Warner Losh <imp@bsdimp.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	Philippe Mathieu-Daude <f4bug@amsat.org>,
	Laurent Vivier <laurent@vivier.eu>
Subject: [RFC v2 4/6] common-user: Adjust system call return on FreeBSD
Date: Wed, 10 Nov 2021 09:31:31 -0700	[thread overview]
Message-ID: <20211110163133.76357-5-imp@bsdimp.com> (raw)
In-Reply-To: <20211110163133.76357-1-imp@bsdimp.com>

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 <imp@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



  parent reply	other threads:[~2021-11-10 16:33 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-10 16:31 [RFC v2 0/6] linux-user: simplify safe signal handling Warner Losh
2021-11-10 16:31 ` [RFC v2 1/6] linux-user: Add host_signal_set_pc to set pc in mcontext Warner Losh
2021-11-10 16:42   ` Richard Henderson
2021-11-10 22:46     ` Warner Losh
2021-11-10 16:31 ` [RFC v2 2/6] linux-user/signal.c: Create a common rewind_if_in_safe_syscall Warner Losh
2021-11-10 16:31 ` [RFC v2 3/6] linux-user/safe-syscall.inc.S: Move to common-user Warner Losh
2021-11-10 16:43   ` Richard Henderson
2021-11-10 16:31 ` Warner Losh [this message]
2021-11-10 16:59   ` [RFC v2 4/6] common-user: Adjust system call return on FreeBSD Richard Henderson
2021-11-10 22:53     ` Warner Losh
2021-11-10 16:31 ` [RFC v2 5/6] common-user/host/mips: create, though mips hosts likely don't work reliably Warner Losh
2021-11-10 17:00   ` Richard Henderson
2021-11-10 22:58     ` Warner Losh
2021-11-10 16:31 ` [RFC v2 6/6] *-user: move safe-syscall.* to common-user Warner Losh
2021-11-10 17:04   ` Richard Henderson
2021-11-10 23:02     ` Warner Losh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211110163133.76357-5-imp@bsdimp.com \
    --to=imp@bsdimp.com \
    --cc=f4bug@amsat.org \
    --cc=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.