[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 00/17] linux-user: simplify safe signal handling
From: |
Richard Henderson |
Subject: |
[PATCH v5 00/17] linux-user: simplify safe signal handling |
Date: |
Wed, 17 Nov 2021 17:03:55 +0100 |
Warner's v3:
20211113045603.60391-1-imp@bsdimp.com/">https://patchew.org/QEMU/20211113045603.60391-1-imp@bsdimp.com/
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.
r~
Richard Henderson (13):
common-user: Move syscall error detection into safe_syscall_base
common-user/host/mips: Add safe-syscall.inc.S
common-user/host/sparc64: Add safe-syscall.inc.S
linux-user: Remove HAVE_SAFE_SYSCALL and hostdep.h
*-user: Rename TARGET_ERESTARTSYS to QEMU_ERESTARTSYS
linux-user: Rename TARGET_QEMU_ESIGRETURN to QEMU_ESIGRETURN
bsd-user: Create special-errno.h
linux-user: Create special-errno.h
meson: Add build infrastructure for common-user
common-user: Move safe-syscall.* from linux-user
linux-user: Move thunk.c from top-level
meson: Move linux_user_ss to linux-user/
meson: Move bsd_user_ss to bsd-user/
Warner Losh (4):
linux-user: Add host_signal_set_pc to set pc in mcontext
linux-user/signal.c: Create a common rewind_if_in_safe_syscall
linux-user/safe-syscall.inc.S: Move to common-user
common-user: Adjust system call return on FreeBSD
meson.build | 23 ++-
bsd-user/errno_defs.h | 6 +-
bsd-user/special-errno.h | 24 ++++
{linux-user => include/user}/safe-syscall.h | 39 ++---
linux-user/cpu_loop-common.h | 1 +
linux-user/generic/target_errno_defs.h | 17 ---
linux-user/host/aarch64/host-signal.h | 5 +
linux-user/host/aarch64/hostdep.h | 38 -----
linux-user/host/alpha/host-signal.h | 5 +
linux-user/host/arm/host-signal.h | 5 +
linux-user/host/arm/hostdep.h | 38 -----
linux-user/host/i386/host-signal.h | 5 +
linux-user/host/i386/hostdep.h | 38 -----
linux-user/host/ia64/hostdep.h | 15 --
linux-user/host/mips/host-signal.h | 5 +
linux-user/host/mips/hostdep.h | 15 --
linux-user/host/ppc/host-signal.h | 5 +
linux-user/host/ppc/hostdep.h | 15 --
linux-user/host/ppc64/hostdep.h | 38 -----
linux-user/host/riscv/host-signal.h | 5 +
linux-user/host/riscv/hostdep.h | 34 -----
linux-user/host/s390/host-signal.h | 5 +
linux-user/host/s390/hostdep.h | 15 --
linux-user/host/s390x/hostdep.h | 38 -----
linux-user/host/sparc/host-signal.h | 9 ++
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/host-signal.h | 5 +
linux-user/host/x86_64/hostdep.h | 38 -----
linux-user/signal-common.h | 4 +-
linux-user/special-errno.h | 32 +++++
linux-user/user-internals.h | 1 -
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 | 19 ++-
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 +-
bsd-user/meson.build | 6 +
.../host/aarch64/safe-syscall.inc.S | 65 ++++++---
.../host/arm/safe-syscall.inc.S | 69 ++++++---
.../host/i386/safe-syscall.inc.S | 61 +++++---
common-user/host/mips/safe-syscall.inc.S | 135 ++++++++++++++++++
.../host/ppc64/safe-syscall.inc.S | 63 ++++----
.../host/riscv/safe-syscall.inc.S | 50 ++++---
.../host/s390x/safe-syscall.inc.S | 50 ++++---
common-user/host/sparc64/safe-syscall.inc.S | 91 ++++++++++++
.../host/x86_64/safe-syscall.inc.S | 80 +++++++----
common-user/meson.build | 3 +
{linux-user => common-user}/safe-syscall.S | 5 +-
linux-user/meson.build | 9 +-
82 files changed, 778 insertions(+), 689 deletions(-)
create mode 100644 bsd-user/special-errno.h
rename {linux-user => include/user}/safe-syscall.h (81%)
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
rename thunk.c => linux-user/thunk.c (100%)
rename {linux-user => common-user}/host/aarch64/safe-syscall.inc.S (64%)
rename {linux-user => common-user}/host/arm/safe-syscall.inc.S (64%)
rename {linux-user => common-user}/host/i386/safe-syscall.inc.S (71%)
create mode 100644 common-user/host/mips/safe-syscall.inc.S
rename {linux-user => common-user}/host/ppc64/safe-syscall.inc.S (68%)
rename {linux-user => common-user}/host/riscv/safe-syscall.inc.S (77%)
rename {linux-user => common-user}/host/s390x/safe-syscall.inc.S (71%)
create mode 100644 common-user/host/sparc64/safe-syscall.inc.S
rename {linux-user => common-user}/host/x86_64/safe-syscall.inc.S (64%)
create mode 100644 common-user/meson.build
rename {linux-user => common-user}/safe-syscall.S (91%)
--
2.25.1
- [PATCH v5 00/17] linux-user: simplify safe signal handling,
Richard Henderson <=