qemu-cr16/linux-user/aarch64
Peter Maydell 3cdd990aa9 linux-user/aarch64: Clear TPIDR2_EL0 when delivering signals
A recent change to the kernel (Linux commit b376108e1f88
"arm64/fpsimd: signal: Clear TPIDR2 when delivering signals") updated
the signal-handler entry code to always clear TPIDR2_EL0.

This is necessary for the userspace ZA lazy saving scheme to work
correctly when unwinding exceptions across a signal boundary.
(For the essay-length description of the incorrect behaviour and
why this is the correct fix, see the commit message for the
kernel commit.)

Make QEMU also clear TPIDR2_EL0 on signal entry, applying the
equivalent bugfix to our implementation.

Note that getting this unwinding to work correctly also requires
changes to the userspace code, e.g.  as implemented in gcc in
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b5ffc8e75a8

This change is technically an ABI change; from the kernel's
point of view SME was never enabled (it was hidden behind
CONFIG_BROKEN) before the change. From QEMU's point of view
our SME-related signal handling was broken anyway as we weren't
saving and restoring TPIDR2_EL0.

Cc: qemu-stable@nongnu.org
Fixes: 78011586b9 ("target/arm: Enable SME for user-only")
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250725175510.3864231-2-peter.maydell@linaro.org>
2025-07-25 13:11:48 -10:00
..
cpu_loop.c linux-user/aarch64: Remove unused get/put_user macros 2025-03-14 10:49:20 +00:00
Makefile.vdso linux-user/aarch64: Reduce vdso alignment to 4k 2024-11-16 08:42:25 -08:00
meson.build linux-user,aarch64: move to syscalltbl file 2024-09-22 09:30:18 +02:00
mte_user_helper.c target/arm: Factor out code for setting MTE TCF0 field 2024-07-05 12:35:14 +01:00
mte_user_helper.h linux-user/aarch64: Include missing 'user/abitypes.h' header 2024-12-20 17:44:56 +01:00
signal.c linux-user/aarch64: Clear TPIDR2_EL0 when delivering signals 2025-07-25 13:11:48 -10:00
sockbits.h linux-user: move socket.h generic definitions to generic/sockbits.h 2018-05-25 10:10:55 +02:00
syscall_64.tbl linux-user,aarch64: move to syscalltbl file 2024-09-22 09:30:18 +02:00
syscall_nr.h linux-user,aarch64: move to syscalltbl file 2024-09-22 09:30:18 +02:00
syscallhdr.sh linux-user,aarch64: move to syscalltbl file 2024-09-22 09:30:18 +02:00
target_cpu.h linux-user/aarch64: Clear tpidr2_el0 if CLONE_SETTLS 2022-07-11 13:43:51 +01:00
target_elf.h linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
target_errno_defs.h linux-user: Extract target errno to 'target_errno_defs.h' 2021-07-12 21:53:35 +02:00
target_fcntl.h linux-user: move arm/aarch64/m68k fcntl definitions to [arm|aarch64|m68k]/target_fcntl.h 2018-06-04 01:30:44 +02:00
target_flat.h linux-user: move target_flat.h to target subdirs 2023-02-03 22:55:12 +01:00
target_mman.h linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
target_prctl.h target/arm: Factor out code for setting MTE TCF0 field 2024-07-05 12:35:14 +01:00
target_proc.h linux-user: Emulate /proc/cpuinfo on aarch64 and arm 2023-09-01 13:33:36 -07:00
target_resource.h linux-user: Move generic TARGET_RLIMIT* definitions to generic/target_resource.h 2022-02-01 08:01:38 +01:00
target_signal.h linux-user: Move TARGET_SA_RESTORER out of generic/signal.h 2025-02-18 08:29:03 -08:00
target_structs.h linux-user: Move target_struct.h generic definitions to generic/ 2022-01-11 18:40:44 +01:00
target_syscall.h Replace TARGET_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
termbits.h linux-user: Add generic 'termbits.h' for some archs 2020-08-27 12:29:50 +02:00
vdso-be.so linux-user/aarch64: Reduce vdso alignment to 4k 2024-11-16 08:42:25 -08:00
vdso-le.so linux-user/aarch64: Reduce vdso alignment to 4k 2024-11-16 08:42:25 -08:00
vdso.ld linux-user/aarch64: Add vdso 2023-10-30 13:41:55 -07:00
vdso.S linux-user/aarch64: Add padding before __kernel_rt_sigreturn 2024-02-03 16:46:10 +10:00