[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 00/67] user-only: Cleanup SIGSEGV and SIGBUS handling
From: |
Richard Henderson |
Subject: |
[PATCH v5 00/67] user-only: Cleanup SIGSEGV and SIGBUS handling |
Date: |
Thu, 14 Oct 2021 21:09:46 -0700 |
For v5, I've combined the sigsegv and sigbus patch sets, because
they're so very closely modelled. We've got user-only hooks named
record_sigsegv
record_sigbus
While the tlb_fill hook becomes sysemu only, the corresponding
do_unaligned_access hook was always sysemu only and stays that way.
The actual tcg backend patches to enable proper delivery of the
unaligned accesses have been delayed until another patch set, as
this is quite large enough -- I'm mostly restricting this to the
user-only interface (though there are some extra patches that are
included to make sure things build properly).
It has been a bit of a mess revising this, in that v4 of the
unaligned access patch set went out with an empty subject line.
Patches lacking review, some of which are new:
04-accel-tcg-Fold-cpu_exit_tb_from_sighandler-into-c.patch
07-linux-user-host-x86-Populate-host_signal.h.patch
10-linux-user-host-sparc-Populate-host_signal.h.patch
12-linux-user-host-aarch64-Populate-host_signal.h.patch
16-target-arm-Fixup-comment-re-handle_cpu_signal.patch
21-target-alpha-Implement-alpha_cpu_record_sigsegv.patch
23-target-arm-Implement-arm_cpu_record_sigsegv.patch
26-target-hppa-Make-hppa_cpu_tlb_fill-sysemu-only.patch
29-target-microblaze-Make-mb_cpu_tlb_fill-sysemu-onl.patch
36-target-s390x-Use-probe_access_flags-in-s390_probe.patch
38-target-sh4-Make-sh4_cpu_tlb_fill-sysemu-only.patch
42-Revert-cpu-Move-cpu_common_props-to-hw-core-cpu.c.patch
43-hw-core-Add-TCGCPUOps.record_sigbus.patch
44-linux-user-Add-cpu_loop_exit_sigbus.patch
45-target-alpha-Implement-alpha_cpu_record_sigbus.patch
46-target-arm-Implement-arm_cpu_record_sigbus.patch
47-linux-user-hppa-Remove-EXCP_UNALIGN-handling.patch
51-target-ppc-Restrict-ppc_cpu_do_unaligned_access-t.patch
52-target-s390x-Implement-s390x_cpu_record_sigbus.patch
53-linux-user-hppa-Remove-POWERPC_EXCP_ALIGN-handlin.patch
61-linux-user-Handle-BUS_ADRALN-in-host_signal_handl.patch
62-linux-user-Split-out-do_prctl-and-subroutines.patch
63-linux-user-Disable-more-prctl-subcodes.patch
64-linux-user-Add-code-for-PR_GET-SET_UNALIGN.patch
65-target-alpha-Implement-prctl_unalign_sigbus.patch
66-target-hppa-Implement-prctl_unalign_sigbus.patch
67-target-sh4-Implement-prctl_unalign_sigbus.patch
r~
Richard Henderson (67):
accel/tcg: Split out adjust_signal_pc
accel/tcg: Move clear_helper_retaddr to cpu loop
accel/tcg: Split out handle_sigsegv_accerr_write
accel/tcg: Fold cpu_exit_tb_from_sighandler into caller
configure: Merge riscv32 and riscv64 host architectures
linux-user: Reorg handling for SIGSEGV
linux-user/host/x86: Populate host_signal.h
linux-user/host/ppc: Populate host_signal.h
linux-user/host/alpha: Populate host_signal.h
linux-user/host/sparc: Populate host_signal.h
linux-user/host/arm: Populate host_signal.h
linux-user/host/aarch64: Populate host_signal.h
linux-user/host/s390: Populate host_signal.h
linux-user/host/mips: Populate host_signal.h
linux-user/host/riscv: Populate host_signal.h
target/arm: Fixup comment re handle_cpu_signal
linux-user/host/riscv: Improve host_signal_write
linux-user/signal: Drop HOST_SIGNAL_PLACEHOLDER
hw/core: Add TCGCPUOps.record_sigsegv
linux-user: Add cpu_loop_exit_sigsegv
target/alpha: Implement alpha_cpu_record_sigsegv
target/arm: Use cpu_loop_exit_sigsegv for mte tag lookup
target/arm: Implement arm_cpu_record_sigsegv
target/cris: Make cris_cpu_tlb_fill sysemu only
target/hexagon: Remove hexagon_cpu_tlb_fill
target/hppa: Make hppa_cpu_tlb_fill sysemu only
target/i386: Implement x86_cpu_record_sigsegv
target/m68k: Make m68k_cpu_tlb_fill sysemu only
target/microblaze: Make mb_cpu_tlb_fill sysemu only
target/mips: Make mips_cpu_tlb_fill sysemu only
target/nios2: Implement nios2_cpu_record_sigsegv
linux-user/openrisc: Adjust signal for EXCP_RANGE, EXCP_FPE
target/openrisc: Make openrisc_cpu_tlb_fill sysemu only
target/ppc: Implement ppc_cpu_record_sigsegv
target/riscv: Make riscv_cpu_tlb_fill sysemu only
target/s390x: Use probe_access_flags in s390_probe_access
target/s390x: Implement s390_cpu_record_sigsegv
target/sh4: Make sh4_cpu_tlb_fill sysemu only
target/sparc: Make sparc_cpu_tlb_fill sysemu only
target/xtensa: Make xtensa_cpu_tlb_fill sysemu only
accel/tcg: Restrict TCGCPUOps::tlb_fill() to sysemu
Revert "cpu: Move cpu_common_props to hw/core/cpu.c"
hw/core: Add TCGCPUOps.record_sigbus
linux-user: Add cpu_loop_exit_sigbus
target/alpha: Implement alpha_cpu_record_sigbus
target/arm: Implement arm_cpu_record_sigbus
linux-user/hppa: Remove EXCP_UNALIGN handling
target/microblaze: Do not set MO_ALIGN for user-only
target/ppc: Move SPR_DSISR setting to powerpc_excp
target/ppc: Set fault address in ppc_cpu_do_unaligned_access
target/ppc: Restrict ppc_cpu_do_unaligned_access to sysemu
target/s390x: Implement s390x_cpu_record_sigbus
linux-user/hppa: Remove POWERPC_EXCP_ALIGN handling
target/sh4: Set fault address in superh_cpu_do_unaligned_access
target/sparc: Remove DEBUG_UNALIGNED
target/sparc: Split out build_sfsr
target/sparc: Set fault address in sparc_cpu_do_unaligned_access
accel/tcg: Report unaligned atomics for user-only
accel/tcg: Report unaligned load/store for user-only
tcg: Add helper_unaligned_{ld,st} for user-only sigbus
linux-user: Handle BUS_ADRALN in host_signal_handler
linux-user: Split out do_prctl and subroutines
linux-user: Disable more prctl subcodes
linux-user: Add code for PR_GET/SET_UNALIGN
target/alpha: Implement prctl_unalign_sigbus
target/hppa: Implement prctl_unalign_sigbus
target/sh4: Implement prctl_unalign_sigbus
configure | 8 +-
meson.build | 4 +-
include/exec/exec-all.h | 55 +-
include/hw/core/cpu.h | 4 +
include/hw/core/tcg-cpu-ops.h | 71 +-
include/tcg/tcg-ldst.h | 5 +
linux-user/aarch64/target_prctl.h | 160 ++++
linux-user/aarch64/target_syscall.h | 23 -
linux-user/alpha/target_prctl.h | 1 +
linux-user/arm/target_prctl.h | 1 +
linux-user/cris/target_prctl.h | 1 +
linux-user/generic/target_prctl_unalign.h | 27 +
linux-user/hexagon/target_prctl.h | 1 +
linux-user/host/aarch64/host-signal.h | 73 ++
linux-user/host/alpha/host-signal.h | 41 +
linux-user/host/arm/host-signal.h | 29 +
linux-user/host/i386/host-signal.h | 24 +
linux-user/host/mips/host-signal.h | 61 ++
linux-user/host/ppc/host-signal.h | 24 +
linux-user/host/ppc64/host-signal.h | 1 +
linux-user/host/riscv/host-signal.h | 57 ++
linux-user/host/{riscv64 => riscv}/hostdep.h | 4 +-
linux-user/host/riscv32/hostdep.h | 11 -
linux-user/host/s390/host-signal.h | 92 ++
linux-user/host/s390x/host-signal.h | 1 +
linux-user/host/sparc/host-signal.h | 53 ++
linux-user/host/sparc64/host-signal.h | 1 +
linux-user/host/x32/host-signal.h | 1 +
linux-user/host/x86_64/host-signal.h | 24 +
linux-user/hppa/target_prctl.h | 1 +
linux-user/i386/target_prctl.h | 1 +
linux-user/m68k/target_prctl.h | 1 +
linux-user/microblaze/target_prctl.h | 1 +
linux-user/mips/target_prctl.h | 88 ++
linux-user/mips/target_syscall.h | 6 -
linux-user/mips64/target_prctl.h | 1 +
linux-user/mips64/target_syscall.h | 6 -
linux-user/nios2/target_prctl.h | 1 +
linux-user/openrisc/target_prctl.h | 1 +
linux-user/ppc/target_prctl.h | 1 +
linux-user/riscv/target_prctl.h | 1 +
linux-user/s390x/target_prctl.h | 1 +
linux-user/sh4/target_prctl.h | 1 +
linux-user/sparc/target_prctl.h | 1 +
linux-user/x86_64/target_prctl.h | 1 +
linux-user/xtensa/target_prctl.h | 1 +
target/alpha/cpu.h | 26 +-
target/arm/internals.h | 8 +
target/cris/cpu.h | 8 +-
target/hppa/cpu.h | 7 +-
target/i386/tcg/helper-tcg.h | 6 +
target/microblaze/cpu.h | 8 +-
target/mips/tcg/tcg-internal.h | 7 +-
target/nios2/cpu.h | 6 +
target/openrisc/cpu.h | 7 +-
target/ppc/cpu.h | 3 -
target/ppc/internal.h | 17 +-
target/s390x/s390x-internal.h | 9 +
target/sh4/cpu.h | 10 +-
target/xtensa/cpu.h | 2 +-
accel/tcg/cpu-exec.c | 3 +-
accel/tcg/user-exec.c | 863 +++---------------
cpu.c | 31 +
hw/core/cpu-common.c | 17 +-
linux-user/aarch64/cpu_loop.c | 12 +-
linux-user/alpha/cpu_loop.c | 15 -
linux-user/arm/cpu_loop.c | 30 +-
linux-user/cris/cpu_loop.c | 10 -
linux-user/hexagon/cpu_loop.c | 24 +-
linux-user/hppa/cpu_loop.c | 23 -
linux-user/m68k/cpu_loop.c | 10 -
linux-user/microblaze/cpu_loop.c | 10 -
linux-user/mips/cpu_loop.c | 11 -
linux-user/openrisc/cpu_loop.c | 17 +-
linux-user/ppc/cpu_loop.c | 8 -
linux-user/riscv/cpu_loop.c | 7 -
linux-user/s390x/cpu_loop.c | 13 +-
linux-user/sh4/cpu_loop.c | 8 -
linux-user/signal.c | 133 ++-
linux-user/sparc/cpu_loop.c | 25 -
linux-user/syscall.c | 490 +++++-----
linux-user/xtensa/cpu_loop.c | 9 -
target/alpha/cpu.c | 7 +-
target/alpha/helper.c | 39 +-
target/alpha/mem_helper.c | 30 +-
target/alpha/translate.c | 31 +-
target/arm/cpu.c | 7 +-
target/arm/cpu_tcg.c | 7 +-
target/arm/mte_helper.c | 6 +-
target/arm/sve_helper.c | 2 +-
target/arm/tlb_helper.c | 42 +-
target/cris/cpu.c | 4 +-
target/cris/helper.c | 18 -
target/hexagon/cpu.c | 23 -
target/hppa/cpu.c | 2 +-
target/hppa/mem_helper.c | 15 -
target/hppa/translate.c | 19 +-
target/i386/tcg/tcg-cpu.c | 3 +-
target/i386/tcg/user/excp_helper.c | 23 +-
target/m68k/cpu.c | 2 +-
target/m68k/helper.c | 6 +-
target/microblaze/cpu.c | 2 +-
target/microblaze/helper.c | 13 +-
target/microblaze/translate.c | 16 +
target/mips/cpu.c | 2 +-
target/mips/tcg/user/tlb_helper.c | 59 --
target/nios2/cpu.c | 6 +-
target/nios2/helper.c | 7 +-
target/openrisc/cpu.c | 2 +-
target/openrisc/mmu.c | 9 -
target/ppc/cpu_init.c | 6 +-
target/ppc/excp_helper.c | 41 +-
target/ppc/user_only_helper.c | 15 +-
target/riscv/cpu.c | 2 +-
target/riscv/cpu_helper.c | 21 +-
target/s390x/cpu.c | 7 +-
target/s390x/tcg/excp_helper.c | 45 +-
target/s390x/tcg/mem_helper.c | 18 +-
target/sh4/cpu.c | 2 +-
target/sh4/helper.c | 9 +-
target/sh4/op_helper.c | 5 +
target/sh4/translate.c | 50 +-
target/sparc/cpu.c | 2 +-
target/sparc/ldst_helper.c | 22 -
target/sparc/mmu_helper.c | 115 ++-
target/xtensa/cpu.c | 2 +-
target/xtensa/helper.c | 22 +-
.../{riscv64 => riscv}/safe-syscall.inc.S | 0
target/cris/meson.build | 7 +-
target/hppa/meson.build | 6 +-
target/mips/tcg/meson.build | 3 -
target/mips/tcg/user/meson.build | 3 -
target/openrisc/meson.build | 2 +-
target/sparc/meson.build | 2 +-
134 files changed, 1874 insertions(+), 1800 deletions(-)
create mode 100644 linux-user/aarch64/target_prctl.h
create mode 100644 linux-user/alpha/target_prctl.h
create mode 100644 linux-user/arm/target_prctl.h
create mode 100644 linux-user/cris/target_prctl.h
create mode 100644 linux-user/generic/target_prctl_unalign.h
create mode 100644 linux-user/hexagon/target_prctl.h
create mode 100644 linux-user/host/aarch64/host-signal.h
create mode 100644 linux-user/host/alpha/host-signal.h
create mode 100644 linux-user/host/arm/host-signal.h
create mode 100644 linux-user/host/i386/host-signal.h
create mode 100644 linux-user/host/mips/host-signal.h
create mode 100644 linux-user/host/ppc/host-signal.h
create mode 100644 linux-user/host/ppc64/host-signal.h
create mode 100644 linux-user/host/riscv/host-signal.h
rename linux-user/host/{riscv64 => riscv}/hostdep.h (94%)
delete mode 100644 linux-user/host/riscv32/hostdep.h
create mode 100644 linux-user/host/s390/host-signal.h
create mode 100644 linux-user/host/s390x/host-signal.h
create mode 100644 linux-user/host/sparc/host-signal.h
create mode 100644 linux-user/host/sparc64/host-signal.h
create mode 100644 linux-user/host/x32/host-signal.h
create mode 100644 linux-user/host/x86_64/host-signal.h
create mode 100644 linux-user/hppa/target_prctl.h
create mode 100644 linux-user/i386/target_prctl.h
create mode 100644 linux-user/m68k/target_prctl.h
create mode 100644 linux-user/microblaze/target_prctl.h
create mode 100644 linux-user/mips/target_prctl.h
create mode 100644 linux-user/mips64/target_prctl.h
create mode 100644 linux-user/nios2/target_prctl.h
create mode 100644 linux-user/openrisc/target_prctl.h
create mode 100644 linux-user/ppc/target_prctl.h
create mode 100644 linux-user/riscv/target_prctl.h
create mode 100644 linux-user/s390x/target_prctl.h
create mode 100644 linux-user/sh4/target_prctl.h
create mode 100644 linux-user/sparc/target_prctl.h
create mode 100644 linux-user/x86_64/target_prctl.h
create mode 100644 linux-user/xtensa/target_prctl.h
delete mode 100644 target/mips/tcg/user/tlb_helper.c
rename linux-user/host/{riscv64 => riscv}/safe-syscall.inc.S (100%)
delete mode 100644 target/mips/tcg/user/meson.build
--
2.25.1
- [PATCH v5 00/67] user-only: Cleanup SIGSEGV and SIGBUS handling,
Richard Henderson <=
- [PATCH v5 01/67] accel/tcg: Split out adjust_signal_pc, Richard Henderson, 2021/10/15
- [PATCH v5 02/67] accel/tcg: Move clear_helper_retaddr to cpu loop, Richard Henderson, 2021/10/15
- [PATCH v5 05/67] configure: Merge riscv32 and riscv64 host architectures, Richard Henderson, 2021/10/15
- [PATCH v5 03/67] accel/tcg: Split out handle_sigsegv_accerr_write, Richard Henderson, 2021/10/15
- [PATCH v5 04/67] accel/tcg: Fold cpu_exit_tb_from_sighandler into caller, Richard Henderson, 2021/10/15
- [PATCH v5 07/67] linux-user/host/x86: Populate host_signal.h, Richard Henderson, 2021/10/15