From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: laurent@vivier.eu, imp@bsdimp.com
Subject: [PATCH for-7.0 v6 00/16] linux-user: simplify safe signal handling
Date: Tue, 23 Nov 2021 18:37:43 +0100 [thread overview]
Message-ID: <20211123173759.1383510-1-richard.henderson@linaro.org> (raw)
Changes for v6:
* Re-order patches so that the move to common happens after
all of the changes to linux-user. Seems less confusing
this way. As a consequence, the meson.build changes for
common-user have to happen at the same time, lest we get
meson configure errors for missing directories.
* Use a helper, safe_syscall_set_errno_tail, to set errno
instead of passing in &errno to safe_syscall_base.
This avoids the aligned register pairs problem that Peter
mentioned, as well as being more efficient in the common
case of syscall success. As a consequence, some R-B have
been dropped.
* New untabify patch (peter).
* PPC64 cleanup split out of larger change.
Changes for v5:
* Fix safe-syscall.S FreeBSD typos.
* Rename special TARGET_EFOO to QEMU_EFOO.
* Create *-user/special-errno.h.
* Build safe-syscall.o only once.
* meson.build cleanups.
* bsd-user builds without modification on master.
Changes for v4:
* Move errno handling into the assembly. While returning the
raw -errno is handy for x86 linux (and a few others), it is
in fact more complex for other hosts that return a separate
error indicator. At which point we wind up jumping through
hoops to return -errno, only to have the caller put it right
back into +errno with -1 result, just like syscall(3).
Pass in &errno, because the method of calculating this
varies wildly between glibc, musl, etc. This means that
the assembly need only store to a provided pointer.
* Add mips and sparc safe-syscall implementations.
Both of which, btw, have separate error indicators. ;-)
* All hosts now have it, so remove HAVE_SAFE_SYSCALL.
* Add meson.build rules for common-user/safe-syscall.S, so
that we don't have to have weird includes from *-user.
Warner's v3:
https://patchew.org/QEMU/20211113045603.60391-1-imp@bsdimp.com/
Patches needing review:
01-linux-user-Untabify-all-safe-syscall.inc.S.patch
02-linux-user-host-ppc64-Use-r11-for-signal_pending-.patch
03-linux-user-Move-syscall-error-detection-into-safe.patch
04-linux-user-host-mips-Add-safe-syscall.inc.S.patch
05-linux-user-host-sparc64-Add-safe-syscall.inc.S.patch
r~
Richard Henderson (16):
linux-user: Untabify all safe-syscall.inc.S
linux-user/host/ppc64: Use r11 for signal_pending address
linux-user: Move syscall error detection into safe_syscall_base
linux-user/host/mips: Add safe-syscall.inc.S
linux-user/host/sparc64: Add safe-syscall.inc.S
linux-user: Remove HAVE_SAFE_SYSCALL and hostdep.h
linux-user: Rename TARGET_ERESTARTSYS to QEMU_ERESTARTSYS
bsd-user: Rename TARGET_ERESTARTSYS to QEMU_ERESTARTSYS
linux-user: Rename TARGET_QEMU_ESIGRETURN to QEMU_ESIGRETURN
linux-user: Create special-errno.h
bsd-user: Create special-errno.h
common-user: Move safe-syscall.* from linux-user
common-user: Adjust system call return on FreeBSD
linux-user: Move thunk.c from top-level
meson: Move linux_user_ss to linux-user/
meson: Move bsd_user_ss to bsd-user/
meson.build | 23 +++-
bsd-user/errno_defs.h | 6 +-
bsd-user/special-errno.h | 24 ++++
{linux-user => include/user}/safe-syscall.h | 37 ++---
linux-user/cpu_loop-common.h | 1 +
linux-user/generic/target_errno_defs.h | 17 ---
linux-user/host/aarch64/hostdep.h | 18 ---
linux-user/host/arm/hostdep.h | 18 ---
linux-user/host/i386/hostdep.h | 18 ---
linux-user/host/ia64/hostdep.h | 15 ---
linux-user/host/mips/hostdep.h | 15 ---
linux-user/host/ppc/hostdep.h | 15 ---
linux-user/host/ppc64/hostdep.h | 18 ---
linux-user/host/riscv/hostdep.h | 14 --
linux-user/host/s390/hostdep.h | 15 ---
linux-user/host/s390x/hostdep.h | 18 ---
linux-user/host/sparc/hostdep.h | 15 ---
linux-user/host/sparc64/hostdep.h | 15 ---
linux-user/host/x32/hostdep.h | 15 ---
linux-user/host/x86_64/hostdep.h | 18 ---
linux-user/signal-common.h | 4 +-
linux-user/special-errno.h | 32 +++++
linux-user/user-internals.h | 1 -
common-user/safe-syscall-error.c | 25 ++++
linux-user/aarch64/cpu_loop.c | 4 +-
linux-user/aarch64/signal.c | 4 +-
linux-user/alpha/cpu_loop.c | 4 +-
linux-user/alpha/signal.c | 8 +-
linux-user/arm/cpu_loop.c | 4 +-
linux-user/arm/signal.c | 8 +-
linux-user/cris/cpu_loop.c | 4 +-
linux-user/cris/signal.c | 4 +-
linux-user/hexagon/cpu_loop.c | 4 +-
linux-user/hexagon/signal.c | 2 +-
linux-user/hppa/cpu_loop.c | 4 +-
linux-user/hppa/signal.c | 4 +-
linux-user/i386/cpu_loop.c | 12 +-
linux-user/i386/signal.c | 8 +-
linux-user/m68k/cpu_loop.c | 4 +-
linux-user/m68k/signal.c | 8 +-
linux-user/microblaze/cpu_loop.c | 4 +-
linux-user/microblaze/signal.c | 4 +-
linux-user/mips/cpu_loop.c | 4 +-
linux-user/mips/signal.c | 8 +-
linux-user/openrisc/cpu_loop.c | 4 +-
linux-user/ppc/cpu_loop.c | 4 +-
linux-user/ppc/signal.c | 10 +-
linux-user/riscv/cpu_loop.c | 4 +-
linux-user/riscv/signal.c | 2 +-
linux-user/s390x/cpu_loop.c | 4 +-
linux-user/s390x/signal.c | 8 +-
linux-user/sh4/cpu_loop.c | 4 +-
linux-user/sh4/signal.c | 8 +-
linux-user/signal.c | 10 +-
linux-user/sparc/cpu_loop.c | 2 +-
linux-user/sparc/signal.c | 8 +-
linux-user/syscall.c | 21 +--
thunk.c => linux-user/thunk.c | 0
linux-user/xtensa/cpu_loop.c | 4 +-
linux-user/xtensa/signal.c | 4 +-
MAINTAINERS | 3 +-
bsd-user/meson.build | 6 +
common-user/host/aarch64/safe-syscall.inc.S | 88 ++++++++++++
common-user/host/arm/safe-syscall.inc.S | 108 +++++++++++++++
common-user/host/i386/safe-syscall.inc.S | 126 ++++++++++++++++++
common-user/host/mips/safe-syscall.inc.S | 123 +++++++++++++++++
common-user/host/ppc64/safe-syscall.inc.S | 90 +++++++++++++
common-user/host/riscv/safe-syscall.inc.S | 79 +++++++++++
common-user/host/s390x/safe-syscall.inc.S | 98 ++++++++++++++
common-user/host/sparc64/safe-syscall.inc.S | 89 +++++++++++++
.../host/x86_64/safe-syscall.inc.S | 44 +++---
common-user/meson.build | 6 +
{linux-user => common-user}/safe-syscall.S | 5 +-
linux-user/host/aarch64/safe-syscall.inc.S | 75 -----------
linux-user/host/arm/safe-syscall.inc.S | 90 -------------
linux-user/host/i386/safe-syscall.inc.S | 100 --------------
linux-user/host/ppc64/safe-syscall.inc.S | 96 -------------
linux-user/host/riscv/safe-syscall.inc.S | 77 -----------
linux-user/host/s390x/safe-syscall.inc.S | 90 -------------
linux-user/meson.build | 9 +-
80 files changed, 1070 insertions(+), 932 deletions(-)
create mode 100644 bsd-user/special-errno.h
rename {linux-user => include/user}/safe-syscall.h (83%)
delete mode 100644 linux-user/host/aarch64/hostdep.h
delete mode 100644 linux-user/host/arm/hostdep.h
delete mode 100644 linux-user/host/i386/hostdep.h
delete mode 100644 linux-user/host/ia64/hostdep.h
delete mode 100644 linux-user/host/mips/hostdep.h
delete mode 100644 linux-user/host/ppc/hostdep.h
delete mode 100644 linux-user/host/ppc64/hostdep.h
delete mode 100644 linux-user/host/riscv/hostdep.h
delete mode 100644 linux-user/host/s390/hostdep.h
delete mode 100644 linux-user/host/s390x/hostdep.h
delete mode 100644 linux-user/host/sparc/hostdep.h
delete mode 100644 linux-user/host/sparc64/hostdep.h
delete mode 100644 linux-user/host/x32/hostdep.h
delete mode 100644 linux-user/host/x86_64/hostdep.h
create mode 100644 linux-user/special-errno.h
create mode 100644 common-user/safe-syscall-error.c
rename thunk.c => linux-user/thunk.c (100%)
create mode 100644 common-user/host/aarch64/safe-syscall.inc.S
create mode 100644 common-user/host/arm/safe-syscall.inc.S
create mode 100644 common-user/host/i386/safe-syscall.inc.S
create mode 100644 common-user/host/mips/safe-syscall.inc.S
create mode 100644 common-user/host/ppc64/safe-syscall.inc.S
create mode 100644 common-user/host/riscv/safe-syscall.inc.S
create mode 100644 common-user/host/s390x/safe-syscall.inc.S
create mode 100644 common-user/host/sparc64/safe-syscall.inc.S
rename {linux-user => common-user}/host/x86_64/safe-syscall.inc.S (81%)
create mode 100644 common-user/meson.build
rename {linux-user => common-user}/safe-syscall.S (91%)
delete mode 100644 linux-user/host/aarch64/safe-syscall.inc.S
delete mode 100644 linux-user/host/arm/safe-syscall.inc.S
delete mode 100644 linux-user/host/i386/safe-syscall.inc.S
delete mode 100644 linux-user/host/ppc64/safe-syscall.inc.S
delete mode 100644 linux-user/host/riscv/safe-syscall.inc.S
delete mode 100644 linux-user/host/s390x/safe-syscall.inc.S
--
2.25.1
next reply other threads:[~2021-11-23 17:39 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-23 17:37 Richard Henderson [this message]
2021-11-23 17:37 ` [PATCH v6 01/16] linux-user: Untabify all safe-syscall.inc.S Richard Henderson
2021-11-25 10:17 ` Warner Losh
2021-11-23 17:37 ` [PATCH v6 02/16] linux-user/host/ppc64: Use r11 for signal_pending address Richard Henderson
2021-11-29 11:01 ` Peter Maydell
2021-11-29 14:30 ` Richard Henderson
2021-11-23 17:37 ` [PATCH v6 03/16] linux-user: Move syscall error detection into safe_syscall_base Richard Henderson
2021-11-25 10:25 ` Warner Losh
2021-11-23 17:37 ` [PATCH v6 04/16] linux-user/host/mips: Add safe-syscall.inc.S Richard Henderson
2021-11-25 10:22 ` Warner Losh
2021-11-29 16:40 ` Peter Maydell
2021-11-29 16:51 ` Richard Henderson
2021-11-23 17:37 ` [PATCH v6 05/16] linux-user/host/sparc64: " Richard Henderson
2021-11-23 17:37 ` [PATCH v6 06/16] linux-user: Remove HAVE_SAFE_SYSCALL and hostdep.h Richard Henderson
2021-11-23 17:37 ` [PATCH v6 07/16] linux-user: Rename TARGET_ERESTARTSYS to QEMU_ERESTARTSYS Richard Henderson
2021-11-23 17:37 ` [PATCH v6 08/16] bsd-user: " Richard Henderson
2021-11-23 17:37 ` [PATCH v6 09/16] linux-user: Rename TARGET_QEMU_ESIGRETURN to QEMU_ESIGRETURN Richard Henderson
2021-11-23 17:37 ` [PATCH v6 10/16] linux-user: Create special-errno.h Richard Henderson
2021-11-23 17:37 ` [PATCH v6 11/16] bsd-user: " Richard Henderson
2021-11-23 17:37 ` [PATCH v6 12/16] common-user: Move safe-syscall.* from linux-user Richard Henderson
2021-11-23 17:37 ` [PATCH v6 13/16] common-user: Adjust system call return on FreeBSD Richard Henderson
2021-11-23 17:37 ` [PATCH v6 14/16] linux-user: Move thunk.c from top-level Richard Henderson
2021-11-23 17:37 ` [PATCH v6 15/16] meson: Move linux_user_ss to linux-user/ Richard Henderson
2021-11-23 17:37 ` [PATCH v6 16/16] meson: Move bsd_user_ss to bsd-user/ Richard Henderson
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=20211123173759.1383510-1-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=imp@bsdimp.com \
--cc=laurent@vivier.eu \
--cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).