Bug 444481 - Don't unmap the vDSO on s390x

Newer Linux kernels on s390x may use the vDSO as a "trampoline" for
syscall restart.  This means that the vDSO is no longer optional, and
unmapping it may lead to a segmentation fault when a system call restart
is performed.

So far Valgrind has been unmapping the vDSO on s390x.  Just don't do this
anymore.
This commit is contained in:
Andreas Arnez 2021-12-09 15:27:41 +01:00
parent 8ee1656165
commit 99bf5dabf7
2 changed files with 3 additions and 1 deletions

1
NEWS
View File

@ -44,6 +44,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
444242 s390x: Valgrind crashes on EXRL with negative offset
444399 arm64: unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP).
== 434283
444481 gdb_server test failures on s390x
444495 dhat/tests/copy fails on s390x
444571 PPC, fix the lxsibzx and lxsihzx so they only load their respective
sized data.

View File

@ -892,7 +892,8 @@ Addr setup_client_stack( void* init_sp,
# if !defined(VGP_ppc32_linux) && !defined(VGP_ppc64be_linux) \
&& !defined(VGP_ppc64le_linux) \
&& !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) \
&& !defined(VGP_nanomips_linux)
&& !defined(VGP_nanomips_linux) \
&& !defined(VGP_s390x_linux)
case AT_SYSINFO_EHDR: {
/* Trash this, because we don't reproduce it */
const NSegment* ehdrseg = VG_(am_find_nsegment)((Addr)auxv->u.a_ptr);