qemu-e2k/linux-user
Ilya Leoshkevich 565a84c1e6 linux-user/host/s390: Treat EX and EXRL as writes
clang-built s390x branch-relative-long test fails on clang-built s390x
QEMU due to the following sequence of events:

- The test zeroes out a code page, clang generates exrl+xc for this.

- do_helper_xc() is called. Clang generates exrl+xc there as well.

- Since there already exists a TB for the code in question, its page is
  read-only and SIGSEGV is raised.

- host_signal_handler() calls host_signal_write() and the latter does
  not recognize exrl as a write. Therefore page_unprotect() is not
  called and the signal is forwarded to the test.

Fix by treating EXRL (and EX, just in case) as writes. There may be
false positives, but they will lead only to an extra page_unprotect()
call.

Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220504114819.1729737-1-iii@linux.ibm.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2022-05-23 22:54:02 +02:00
..
aarch64 Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
alpha Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
arm target/arm: Change CPUArchState.thumb to bool 2022-04-22 14:44:54 +01:00
cris Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
generic linux-user/syscall: Translate TARGET_RLIMIT_RTTIME 2022-02-01 08:01:44 +01:00
hexagon Clean up decorations and whitespace around header guards 2022-05-11 16:50:32 +02:00
hppa linux-user: Move generic TARGET_RLIMIT* definitions to generic/target_resource.h 2022-02-01 08:01:38 +01:00
i386 Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
include linux-user/host/s390: Treat EX and EXRL as writes 2022-05-23 22:54:02 +02:00
m68k Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
microblaze Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
mips Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
mips64 linux-user: Move generic TARGET_RLIMIT* definitions to generic/target_resource.h 2022-02-01 08:01:38 +01:00
nios2 linux-user/nios2: Handle various SIGILL exceptions 2022-04-26 08:17:05 -07:00
openrisc Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
ppc Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
riscv Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
s390x linux-user/s390x: Fix unwinding from signal handlers 2022-05-23 22:52:27 +02:00
sh4 Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
sparc Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
x86_64 linux-user: Move generic TARGET_RLIMIT* definitions to generic/target_resource.h 2022-02-01 08:01:38 +01:00
xtensa Replace TARGET_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
cpu_loop-common.h linux-user: Create special-errno.h 2021-12-19 20:47:33 -08:00
elfload.c linux-user/elfload: Remove pointless non-const CPUArchState cast 2022-05-23 22:47:19 +02:00
errnos.c.inc linux-user: Simplify host <-> target errno conversion using macros 2021-07-12 21:53:35 +02:00
exit.c linux-user: Don't include gdbstub.h in qemu.h 2021-09-13 20:35:45 +02:00
fd-trans.c linux-user: Fix inotify on aarch64 2022-01-27 16:58:33 +01:00
fd-trans.h fd-trans: Fix race condition on reallocation of the translation table. 2021-07-12 21:54:46 +02:00
flat.h
flatload.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00
ioctls.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
linux_loop.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
linuxload.c linux-user: Clean up arg_start/arg_end confusion 2022-05-23 08:15:19 +02:00
loader.h linux-user: Split loader-related prototypes into loader.h 2021-09-13 20:35:44 +02:00
main.c linux-user: Clean up arg_start/arg_end confusion 2022-05-23 08:15:19 +02:00
meson.build user: move common-user includes to a subdirectory of {bsd,linux}-user/ 2022-01-12 14:08:29 +01:00
mmap.c linux-user: Expand log_page_dump inline 2022-04-20 10:51:11 -07:00
qemu.h linux-user: Clean up arg_start/arg_end confusion 2022-05-23 08:15:19 +02:00
semihost.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00
signal-common.h linux-user: Split out helpers for sigsuspend 2022-03-22 13:06:21 +01:00
signal.c compiler.h: replace QEMU_NORETURN with G_NORETURN 2022-04-21 17:03:51 +04:00
socket.h
strace.c linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
strace.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
strace.list linux-user: Add copy_file_range to strace.list 2021-05-18 07:09:58 +02:00
syscall_defs.h linux-user: Remove the deprecated ppc64abi32 target 2022-02-09 13:29:38 +00:00
syscall_types.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
syscall.c linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
target_flat.h
thunk.c linux-user: Move thunk.c from top-level 2021-12-20 10:12:29 -08:00
trace-events linux-user: Rename user_force_sig tracepoint to match function name 2022-01-18 12:41:42 +01:00
trace.h
uaccess.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00
uname.c linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
uname.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
user-internals.h linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
user-mmap.h linux-user: Split mmap prototypes into user-mmap.h 2021-09-13 20:35:45 +02:00
vm86.c linux-user: Split linux-user internals out of qemu.h 2021-09-13 20:35:45 +02:00