print_mmap() assumes that mmap() receives arguments via memory if mmap2() is present. s390x (as opposed to s390) does not fit this pattern: it does not have mmap2(), but mmap() still receives arguments via memory.
Fix by sharing the detection logic between syscall.c and strace.c. Cc: qemu-sta...@nongnu.org Fixes: d971040c2d16 ("linux-user: Fix strace output for old_mmap") Suggested-by: Richard Henderson <richard.hender...@linaro.org> Signed-off-by: Ilya Leoshkevich <i...@linux.ibm.com> Message-ID: <20241120212717.246186-1-...@linux.ibm.com> Reviewed-by: Richard Henderson <richard.hender...@linaro.org> Signed-off-by: Richard Henderson <richard.hender...@linaro.org> (cherry picked from commit d95fd9838b540e69da9b07538ec8ad6ab9eab260) Signed-off-by: Michael Tokarev <m...@tls.msk.ru> (Mjt: compensate for chris architecture removal by v9.1.0-282-gbff4b02ca1f4 "linux-user: Remove support for CRIS target") diff --git a/linux-user/strace.c b/linux-user/strace.c index cf26e55264..3be77c4a38 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -3803,7 +3803,7 @@ print_mmap(CPUArchState *cpu_env, const struct syscallname *name, { return print_mmap_both(cpu_env, name, arg0, arg1, arg2, arg3, arg4, arg5, -#if defined(TARGET_NR_mmap2) +#ifdef TARGET_ARCH_WANT_SYS_OLD_MMAP true #else false diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 2a4137fc22..7ee1d61248 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -10394,10 +10394,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, return ret; #ifdef TARGET_NR_mmap case TARGET_NR_mmap: -#if (defined(TARGET_I386) && defined(TARGET_ABI32)) || \ - (defined(TARGET_ARM) && defined(TARGET_ABI32)) || \ - defined(TARGET_M68K) || defined(TARGET_CRIS) || defined(TARGET_MICROBLAZE) \ - || defined(TARGET_S390X) +#ifdef TARGET_ARCH_WANT_SYS_OLD_MMAP { abi_ulong *v; abi_ulong v1, v2, v3, v4, v5, v6; diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 77ba343c85..e58c627d00 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -2750,4 +2750,11 @@ struct target_sched_param { abi_int sched_priority; }; +#if (defined(TARGET_I386) && defined(TARGET_ABI32)) || \ + (defined(TARGET_ARM) && defined(TARGET_ABI32)) || \ + defined(TARGET_M68K) || defined(TARGET_CRIS) || defined(TARGET_MICROBLAZE) \ + || defined(TARGET_S390X) +#define TARGET_ARCH_WANT_SYS_OLD_MMAP +#endif + #endif -- 2.39.5