glibc/sysdeps/unix/sysv/linux/sh
mirabilos f42634f824 sh4: ensure FPSCR.PR==0 when executing FRCHG [BZ #27543]
If the bit is not 0, the operations FRCHG and FSCHG are
undefined and cause a trap; qemu now checks for this as
well, so we set it to 0 temporarily and restore the old
value in getcontext afterwards (setcontext/swapcontext
already do so).

From the discussion in the bugreport, this can probably
be optimised in one place but none of the people involved
are SH4 assembly experts, this patch is field-tested, and
it’s not a code path run often. The other question, what
happens if a signal occurs while the bit is temporarily 0,
is also still unsolved, but to fix that a kernel change is
most likely needed; this patch changes a certain trap on
many CPUs for a hard-to-get trap in a signal handler if a
signal is delivered during the few instructions the PR bit
is temporarily set to 0, so it’s not a regression for most
users.

See BZ and https://bugs.launchpad.net/qemu/+bug/1796520 for
related discussion, references and review comments.

Signed-off-by: mirabilos <tg@debian.org>
Reviewed-by: Oleg Endo <olegendo@gcc.gnu.org>
Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2025-01-13 11:25:23 -03:00
..
be
bits Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
le
sh3 Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
sh4 sh4: ensure FPSCR.PR==0 when executing FRCHG [BZ #27543] 2025-01-13 11:25:23 -03:00
sys Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
Implies
Makefile
Versions
____longjmp_chk.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
adaptive_spin_count.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
arch-syscall.h
atomic-machine.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
c++-types.data
clone.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
configure
configure.ac
fanotify_mark.c
kernel-features.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
kernel_sigaction.h
kernel_stat.h
localplt.data
lowlevel-atomic.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
makecontext.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
pointer_guard.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
shlib-versions
sigaltstack-offsets.sym
sigcontextinfo.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
syscall.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
syscall_cancel.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
syscalls.list
sysdep.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
sysdep.h Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
time64-compat.h
vfork.S Update copyright dates with scripts/update-copyrights 2025-01-01 11:22:09 -08:00
xstatver.h