qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

linux-user: Fix fadvise64() syscall support for Mips32

By looking at the file arch/mips/kernel/scall32-o32.S in Linux
kernel, it can be deduced that, for Mips32 platform, syscall
corresponding to number _NR_fadvise64 as defined in kernel file
arch/mips/include/uapi/asm/unistd.h translates to kernel function
sys_fadvise64_64, and that argument layout for this system call is
as follows:

0 32 0 32
+----------------+----------------+
(arg1) | fd | __pad | (arg2)
+----------------+----------------+
(arg3) | buffer | (arg4)
+----------------+----------------+
(arg5) | len | (arg6)
+----------------+----------------+
(arg7) | advise | not used | (arg8)
+----------------+----------------+

The same argument layout can be deduced from glibc code, and
relevant commit messages in linux kernel and glibc.

The fix is to change TARGET_NR_fadvise64 to TARGET_NR_fadvise64_64
in Mips32 syscall numbers table. Array mips_syscall_args[] in
linux-user/main.c also already have "fadvise64_64" (and not
"fadvise64") in corresponding place for the syscall number in
question, so no change for linux-user/main.c.

This patch also fixes the failure LTP test posix_fadvise03, if
executed on Qemu-emulated Mips32 platform (user mode).

Signed-off-by: Aleksandar Rikalo <aleksandar.rikalo@imgtec.com>
Signed-off-by: Miroslav Tisma <miroslav.tisma@imgtec.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>

authored by

Aleksandar Markovic and committed by
Riku Voipio
2f2bd444 6e8b33d8

+1 -1
+1 -1
linux-user/mips/syscall_nr.h
··· 256 256 #define TARGET_NR_remap_file_pages (TARGET_NR_Linux + 251) 257 257 #define TARGET_NR_set_tid_address (TARGET_NR_Linux + 252) 258 258 #define TARGET_NR_restart_syscall (TARGET_NR_Linux + 253) 259 - #define TARGET_NR_fadvise64 (TARGET_NR_Linux + 254) 259 + #define TARGET_NR_fadvise64_64 (TARGET_NR_Linux + 254) 260 260 #define TARGET_NR_statfs64 (TARGET_NR_Linux + 255) 261 261 #define TARGET_NR_fstatfs64 (TARGET_NR_Linux + 256) 262 262 #define TARGET_NR_timer_create (TARGET_NR_Linux + 257)