linux-user: Add translation for argument of msync()
msync() uses the flags MS_ASYNC, MS_INVALIDATE and MS_SYNC, which differ between platforms, specifcally on alpha and hppa. Add a target to host translation for those and wire up a nicer strace output. This fixes the testsuite of the macaulay2 debian package with a hppa-linux guest on a x86-64 host. Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <Y5rMcts4qe15RaVN@p100> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
2fe8ed6fe9
commit
fe080593dd
@ -3,6 +3,10 @@
|
||||
|
||||
#define TARGET_MADV_DONTNEED 6
|
||||
|
||||
#define TARGET_MS_ASYNC 1
|
||||
#define TARGET_MS_SYNC 2
|
||||
#define TARGET_MS_INVALIDATE 4
|
||||
|
||||
#include "../generic/target_mman.h"
|
||||
|
||||
#endif
|
||||
|
@ -89,4 +89,17 @@
|
||||
#define TARGET_MADV_DONTNEED_LOCKED 24
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef TARGET_MS_ASYNC
|
||||
#define TARGET_MS_ASYNC 1
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_MS_INVALIDATE
|
||||
#define TARGET_MS_INVALIDATE 2
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_MS_SYNC
|
||||
#define TARGET_MS_SYNC 4
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -10,6 +10,10 @@
|
||||
#define TARGET_MADV_WIPEONFORK 71
|
||||
#define TARGET_MADV_KEEPONFORK 72
|
||||
|
||||
#define TARGET_MS_SYNC 1
|
||||
#define TARGET_MS_ASYNC 2
|
||||
#define TARGET_MS_INVALIDATE 4
|
||||
|
||||
#include "../generic/target_mman.h"
|
||||
|
||||
#endif
|
||||
|
@ -656,7 +656,7 @@
|
||||
{ TARGET_NR_msgsnd, "msgsnd" , NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef TARGET_NR_msync
|
||||
{ TARGET_NR_msync, "msync" , NULL, NULL, NULL },
|
||||
{ TARGET_NR_msync, "msync" , "%s(%p,%u,%d)", NULL, NULL },
|
||||
#endif
|
||||
#ifdef TARGET_NR_multiplexer
|
||||
{ TARGET_NR_multiplexer, "multiplexer" , NULL, NULL, NULL },
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "qemu/path.h"
|
||||
#include "qemu/memfd.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "target_mman.h"
|
||||
#include <elf.h>
|
||||
#include <endian.h>
|
||||
#include <grp.h>
|
||||
@ -7612,6 +7613,14 @@ static inline int target_to_host_mlockall_arg(int arg)
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int target_to_host_msync_arg(abi_long arg)
|
||||
{
|
||||
return ((arg & TARGET_MS_ASYNC) ? MS_ASYNC : 0) |
|
||||
((arg & TARGET_MS_INVALIDATE) ? MS_INVALIDATE : 0) |
|
||||
((arg & TARGET_MS_SYNC) ? MS_SYNC : 0) |
|
||||
(arg & ~(TARGET_MS_ASYNC | TARGET_MS_INVALIDATE | TARGET_MS_SYNC));
|
||||
}
|
||||
|
||||
#if (defined(TARGET_NR_stat64) || defined(TARGET_NR_lstat64) || \
|
||||
defined(TARGET_NR_fstat64) || defined(TARGET_NR_fstatat64) || \
|
||||
defined(TARGET_NR_newfstatat))
|
||||
@ -10128,7 +10137,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
||||
/* ??? msync/mlock/munlock are broken for softmmu. */
|
||||
#ifdef TARGET_NR_msync
|
||||
case TARGET_NR_msync:
|
||||
return get_errno(msync(g2h(cpu, arg1), arg2, arg3));
|
||||
return get_errno(msync(g2h(cpu, arg1), arg2,
|
||||
target_to_host_msync_arg(arg3)));
|
||||
#endif
|
||||
#ifdef TARGET_NR_mlock
|
||||
case TARGET_NR_mlock:
|
||||
|
Loading…
Reference in New Issue
Block a user