From: Warner Losh <imp@bsdimp.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Kyle Evans <kevans@freebsd.org>,
Richard Henderson <richard.henderson@linaro.org>,
def@FreeBSD.org, jrtc27@FreeBSD.org, Warner Losh <imp@bsdimp.com>
Subject: [PATCH v3 00/40] bsd-user: upstream signal implementation
Date: Fri, 28 Jan 2022 16:27:25 -0700 [thread overview]
Message-ID: <20220128232805.86191-1-imp@bsdimp.com> (raw)
Upstream the bsd-user fork signal implementation, for the most part. This
series of commits represents nearly all of the infrastructure that surround
signals, except the actual system call glue (that was also reworked in the
fork and needs its own series). In addition, this adds the sigsegv and sigbus
code to arm. Even in the fork, we don't have good x86 signal implementation,
so there's little to upstream for that at the moment.
bsd-user's signal implementation is similar to linux-user's. The full context
can be found in the bsd-user's fork's 'blitz branch' at
https://github.com/qemu-bsd-user/qemu-bsd-user/tree/blitz which shows how these
are used to implement various system calls. Since this was built from
linux-user's stack stuff, evolved for BSD with the passage of a few years, it
no-doubt missed some bug fixes from linux-user (though nothing obvious stood out
in the quick comparison I made). After the first round of reviews, many of these
improvements have been incorporated.
All the patches have been reviewed by at least one person, except these hunks:
bsd-user/signal.c: implement do_sigaction
bsd-user/signal.c: implement do_sigreturn
though more eyes on any if these changes is quite welcome. All the patches have
also been forward ported to the bsd-user 'blitz' branch and we now pass more
tests there than we did before (though it's only back up to a similar number of
tests to our ancient rebase-3.2 version).
New in version 3:
o Fixed do_sigcation to allow querying of SIGKILL or SIGSTOP.
o Fixed host/target confusion for do_sigaction return codes. Also added comments
about why we use sigprocmask(2) instead of pthread_sigmask(3) since a question
about this came up in review.
o For do_sigreturn, don't set the actual signal mask, but instead defer that
to the main loop to avoid races with signals that are newly active, but
blocked by the signal handler's signal mask and the main loop, as is done
in linux-user.
o Fixed or added a number of comments based on review feedback for typos or todo
items.
o bsd-user/signal-common.h: Move signal functions prototypes to here
Move includes of signal-common.h to this patch hunk in */target_arch_cpu.h to fix
compile issues.
o Also, rebased to current tip of master and fixed a minor conflict or two (which
should get rid of the does not apply warning on patchew).
Patchew history: https://patchew.org/QEMU/20220125012947.14974-1-imp@bsdimp.com/
Warner Losh (40):
bsd-user: Complete FreeBSD siginfo
bsd-user: Create setup_sigframe_arch to setup sigframe context
bsd-user/arm/signal.c: Implement setup_sigframe_arch for arm
bsd-user/arm/signal.c: get_mcontext should zero vfp data
bsd-user: Remove vestiges of signal queueing code
bsd-user: Bring in docs from linux-user for signal_pending
bsd-user/arm/target_arch_cpu.h: Move EXCP_ATOMIC to match linux-user
bsd-user/signal.c: implement force_sig_fault
bsd-user/signal-common.h: Move signal functions prototypes to here
bsd-user/signal.c: Implement cpu_loop_exit_sigsegv
bsd-user/signal.c: implement cpu_loop_exit_sigbus
bsd-user/arm/arget_arch_cpu.h: Move EXCP_DEBUG and EXCP_BKPT together
bsd-user/arm/target_arch_cpu.h: Correct code pointer
bsd-user/arm/target_arch_cpu.h: Use force_sig_fault for EXCP_UDEF
bsd-user/arm/target_arch_cpu.h: Implement data faults
bsd-user/signal.c: implement abstract target / host signal translation
bsd-user/signal.c: Implement signal_init()
bsd-user/signal.c: Add si_type argument to queue_signal
bsd-user/host/arm/host-signal.h: Implement host_signal_*
bsd-user/host/i386/host-signal.h: Implement host_signal_*
bsd-user/host/x86_64/host-signal.h: Implement host_signal_*
bsd-user: Add host signals to the build
bsd-user: Add trace events for bsd-user
bsd-user/signal.c: host_to_target_siginfo_noswap
bsd-user/signal.c: Implement rewind_if_in_safe_syscall
bsd-user/signal.c: Implement host_signal_handler
bsd-user/strace.c: print_taken_signal
bsd-user/signal.c: Implement dump_core_and_abort
bsd-user/signal.c: Fill in queue_signal
bsd-user/signal.c: sigset manipulation routines.
bsd-user/signal.c: setup_frame
bsd-user/signal.c: handle_pending_signal
bsd-user/signal.c: tswap_siginfo
bsd-user/signal.c: process_pending_signals
bsd-user/signal.c: implement do_sigreturn
bsd-user/signal.c: implement do_sigaction
bsd-user/signal.c: do_sigaltstack
MAINTAINERS: Add tests/vm/*bsd to the list to get reviews on
bsd-user: Rename arg name for target_cpu_reset to env
bsd-user/freebsd/target_os_ucontext.h: Prefer env as arg name for
CPUArchState args
MAINTAINERS | 1 +
bsd-user/arm/signal.c | 59 +-
bsd-user/arm/target_arch_cpu.h | 101 +--
bsd-user/freebsd/target_os_siginfo.h | 15 +-
bsd-user/freebsd/target_os_signal.h | 3 +
bsd-user/freebsd/target_os_ucontext.h | 6 +-
bsd-user/host/arm/host-signal.h | 35 +
bsd-user/host/i386/host-signal.h | 37 +
bsd-user/host/x86_64/host-signal.h | 37 +
bsd-user/i386/signal.c | 13 +
bsd-user/i386/target_arch_cpu.h | 5 +-
bsd-user/main.c | 14 +-
bsd-user/qemu.h | 66 +-
bsd-user/signal-common.h | 70 ++
bsd-user/signal.c | 1008 ++++++++++++++++++++++++-
bsd-user/strace.c | 97 +++
bsd-user/syscall_defs.h | 1 +
bsd-user/trace-events | 11 +
bsd-user/trace.h | 1 +
bsd-user/x86_64/signal.c | 13 +
bsd-user/x86_64/target_arch_cpu.h | 5 +-
meson.build | 6 +-
22 files changed, 1490 insertions(+), 114 deletions(-)
create mode 100644 bsd-user/host/arm/host-signal.h
create mode 100644 bsd-user/host/i386/host-signal.h
create mode 100644 bsd-user/host/x86_64/host-signal.h
create mode 100644 bsd-user/signal-common.h
create mode 100644 bsd-user/trace-events
create mode 100644 bsd-user/trace.h
--
2.33.1
next reply other threads:[~2022-01-28 23:37 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-28 23:27 Warner Losh [this message]
2022-01-28 23:27 ` [PATCH v3 01/40] bsd-user: Complete FreeBSD siginfo Warner Losh
2022-01-28 23:27 ` [PATCH v3 02/40] bsd-user: Create setup_sigframe_arch to setup sigframe context Warner Losh
2022-01-28 23:27 ` [PATCH v3 03/40] bsd-user/arm/signal.c: Implement setup_sigframe_arch for arm Warner Losh
2022-01-28 23:27 ` [PATCH v3 04/40] bsd-user/arm/signal.c: get_mcontext should zero vfp data Warner Losh
2022-01-28 23:27 ` [PATCH v3 05/40] bsd-user: Remove vestiges of signal queueing code Warner Losh
2022-01-28 23:27 ` [PATCH v3 06/40] bsd-user: Bring in docs from linux-user for signal_pending Warner Losh
2022-01-28 23:27 ` [PATCH v3 07/40] bsd-user/arm/target_arch_cpu.h: Move EXCP_ATOMIC to match linux-user Warner Losh
2022-01-28 23:27 ` [PATCH v3 08/40] bsd-user/signal.c: implement force_sig_fault Warner Losh
2022-01-28 23:27 ` [PATCH v3 09/40] bsd-user/signal-common.h: Move signal functions prototypes to here Warner Losh
2022-01-28 23:27 ` [PATCH v3 10/40] bsd-user/signal.c: Implement cpu_loop_exit_sigsegv Warner Losh
2022-01-28 23:27 ` [PATCH v3 11/40] bsd-user/signal.c: implement cpu_loop_exit_sigbus Warner Losh
2022-01-28 23:27 ` [PATCH v3 12/40] bsd-user/arm/arget_arch_cpu.h: Move EXCP_DEBUG and EXCP_BKPT together Warner Losh
2022-01-28 23:27 ` [PATCH v3 13/40] bsd-user/arm/target_arch_cpu.h: Correct code pointer Warner Losh
2022-01-28 23:27 ` [PATCH v3 14/40] bsd-user/arm/target_arch_cpu.h: Use force_sig_fault for EXCP_UDEF Warner Losh
2022-01-28 23:27 ` [PATCH v3 15/40] bsd-user/arm/target_arch_cpu.h: Implement data faults Warner Losh
2022-01-28 23:27 ` [PATCH v3 16/40] bsd-user/signal.c: implement abstract target / host signal translation Warner Losh
2022-01-28 23:27 ` [PATCH v3 17/40] bsd-user/signal.c: Implement signal_init() Warner Losh
2022-01-28 23:27 ` [PATCH v3 18/40] bsd-user/signal.c: Add si_type argument to queue_signal Warner Losh
2022-01-28 23:27 ` [PATCH v3 19/40] bsd-user/host/arm/host-signal.h: Implement host_signal_* Warner Losh
2022-01-28 23:27 ` [PATCH v3 20/40] bsd-user/host/i386/host-signal.h: " Warner Losh
2022-01-28 23:27 ` [PATCH v3 21/40] bsd-user/host/x86_64/host-signal.h: " Warner Losh
2022-01-28 23:27 ` [PATCH v3 22/40] bsd-user: Add host signals to the build Warner Losh
2022-01-28 23:27 ` [PATCH v3 23/40] bsd-user: Add trace events for bsd-user Warner Losh
2022-01-28 23:27 ` [PATCH v3 24/40] bsd-user/signal.c: host_to_target_siginfo_noswap Warner Losh
2022-01-28 23:27 ` [PATCH v3 25/40] bsd-user/signal.c: Implement rewind_if_in_safe_syscall Warner Losh
2022-01-28 23:27 ` [PATCH v3 26/40] bsd-user/signal.c: Implement host_signal_handler Warner Losh
2022-01-28 23:27 ` [PATCH v3 27/40] bsd-user/strace.c: print_taken_signal Warner Losh
2022-01-28 23:27 ` [PATCH v3 28/40] bsd-user/signal.c: Implement dump_core_and_abort Warner Losh
2022-01-28 23:27 ` [PATCH v3 29/40] bsd-user/signal.c: Fill in queue_signal Warner Losh
2022-01-28 23:27 ` [PATCH v3 30/40] bsd-user/signal.c: sigset manipulation routines Warner Losh
2022-01-28 23:27 ` [PATCH v3 31/40] bsd-user/signal.c: setup_frame Warner Losh
2022-01-28 23:27 ` [PATCH v3 32/40] bsd-user/signal.c: handle_pending_signal Warner Losh
2022-01-28 23:27 ` [PATCH v3 33/40] bsd-user/signal.c: tswap_siginfo Warner Losh
2022-01-28 23:27 ` [PATCH v3 34/40] bsd-user/signal.c: process_pending_signals Warner Losh
2022-01-28 23:28 ` [PATCH v3 35/40] bsd-user/signal.c: implement do_sigreturn Warner Losh
2022-01-30 21:14 ` Richard Henderson
2022-01-28 23:28 ` [PATCH v3 36/40] bsd-user/signal.c: implement do_sigaction Warner Losh
2022-01-30 21:19 ` Richard Henderson
2022-01-30 21:34 ` Warner Losh
2022-01-28 23:28 ` [PATCH v3 37/40] bsd-user/signal.c: do_sigaltstack Warner Losh
2022-01-28 23:28 ` [PATCH v3 38/40] MAINTAINERS: Add tests/vm/*bsd to the list to get reviews on Warner Losh
2022-01-28 23:28 ` [PATCH v3 39/40] bsd-user: Rename arg name for target_cpu_reset to env Warner Losh
2022-01-28 23:28 ` [PATCH v3 40/40] bsd-user/freebsd/target_os_ucontext.h: Prefer env as arg name for CPUArchState args 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=20220128232805.86191-1-imp@bsdimp.com \
--to=imp@bsdimp.com \
--cc=def@FreeBSD.org \
--cc=jrtc27@FreeBSD.org \
--cc=kevans@freebsd.org \
--cc=peter.maydell@linaro.org \
--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 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).