[PATCH 00/30] bsd-user: upstream our signal implementation

Warner Losh posted 30 patches 2 years, 3 months ago
Test checkpatch passed
Failed in applying to current master (apply log)
There is a newer version of this series
bsd-user/arm/target_arch_cpu.h     |   91 +--
bsd-user/host/arm/host-signal.h    |   39 ++
bsd-user/host/i386/host-signal.h   |   37 +
bsd-user/host/x86_64/host-signal.h |   37 +
bsd-user/meson.build               |    1 +
bsd-user/qemu.h                    |   46 +-
bsd-user/signal-common.h           |   14 +
bsd-user/signal.c                  | 1001 +++++++++++++++++++++++++++-
bsd-user/strace.c                  |   97 +++
bsd-user/syscall_defs.h            |    1 +
bsd-user/trace-events              |   11 +
bsd-user/trace.h                   |    1 +
meson.build                        |    6 +-
13 files changed, 1327 insertions(+), 55 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
[PATCH 00/30] bsd-user: upstream our signal implementation
Posted by Warner Losh 2 years, 3 months ago
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. However, all
signals are always queued for batch processing (except synchronous ones that
kill the process). The full context can be found in the 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).

I lumped thinks slightly larger than past patch sets, but none of the patches
should exceed about 100 lines of diffs (there is one that clocks in at 166
though, but I had trouble splitting it smaller). With over 30k lines of diffs
between the two repos, I need to find more efficient ways of getting things
reviewed and each extra chunk takes time to curate so I'm searching for a good
happy medium.

Warner Losh (30):
  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.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/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-usr
  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: core_dump_signal
  bsd-user/signal.c: force_sig
  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

 bsd-user/arm/target_arch_cpu.h     |   91 +--
 bsd-user/host/arm/host-signal.h    |   39 ++
 bsd-user/host/i386/host-signal.h   |   37 +
 bsd-user/host/x86_64/host-signal.h |   37 +
 bsd-user/meson.build               |    1 +
 bsd-user/qemu.h                    |   46 +-
 bsd-user/signal-common.h           |   14 +
 bsd-user/signal.c                  | 1001 +++++++++++++++++++++++++++-
 bsd-user/strace.c                  |   97 +++
 bsd-user/syscall_defs.h            |    1 +
 bsd-user/trace-events              |   11 +
 bsd-user/trace.h                   |    1 +
 meson.build                        |    6 +-
 13 files changed, 1327 insertions(+), 55 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