* [PATCH] linux-user: Add translation for argument of msync()
@ 2022-12-15 7:27 Helge Deller
2022-12-15 7:58 ` Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Helge Deller @ 2022-12-15 7:27 UTC (permalink / raw)
To: Laurent Vivier, Richard Henderson, qemu-devel, Ilya Leoshkevich
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>
diff --git a/linux-user/alpha/target_mman.h b/linux-user/alpha/target_mman.h
index cd6e3d70a6..051544f5ab 100644
--- a/linux-user/alpha/target_mman.h
+++ b/linux-user/alpha/target_mman.h
@@ -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
diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
index 1436a3c543..32bf1a52d0 100644
--- a/linux-user/generic/target_mman.h
+++ b/linux-user/generic/target_mman.h
@@ -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
diff --git a/linux-user/hppa/target_mman.h b/linux-user/hppa/target_mman.h
index 66dd9f7941..f9b6b97032 100644
--- a/linux-user/hppa/target_mman.h
+++ b/linux-user/hppa/target_mman.h
@@ -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
diff --git a/linux-user/strace.list b/linux-user/strace.list
index a75101fca1..ac8f872371 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -650,7 +650,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 },
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index d58e9b8d10..e541fbe09a 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -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>
@@ -7667,6 +7668,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))
@@ -10163,7 +10172,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:
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 7:27 [PATCH] linux-user: Add translation for argument of msync() Helge Deller
@ 2022-12-15 7:58 ` Philippe Mathieu-Daudé
2022-12-15 8:15 ` Helge Deller
2022-12-15 15:58 ` Richard Henderson
2023-03-07 16:19 ` Laurent Vivier
2023-03-07 16:21 ` Laurent Vivier
2 siblings, 2 replies; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-12-15 7:58 UTC (permalink / raw)
To: Helge Deller, Laurent Vivier, Richard Henderson, qemu-devel,
Ilya Leoshkevich
On 15/12/22 08:27, Helge Deller wrote:
> 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>
>
> diff --git a/linux-user/alpha/target_mman.h b/linux-user/alpha/target_mman.h
> index cd6e3d70a6..051544f5ab 100644
> --- a/linux-user/alpha/target_mman.h
> +++ b/linux-user/alpha/target_mman.h
> @@ -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
> diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
> index 1436a3c543..32bf1a52d0 100644
> --- a/linux-user/generic/target_mman.h
> +++ b/linux-user/generic/target_mman.h
> @@ -89,4 +89,17 @@
> #define TARGET_MADV_DONTNEED_LOCKED 24
> #endif
>
> +
> +#ifndef TARGET_MS_ASYNC
> +#define TARGET_MS_ASYNC 1
Hmm don't we want to keep the host flag instead?
#define TARGET_MS_ASYNC MS_ASYNC
> +#endif
> +
> +#ifndef TARGET_MS_INVALIDATE
> +#define TARGET_MS_INVALIDATE 2
Ditto,
> +#endif
> +
> +#ifndef TARGET_MS_SYNC
> +#define TARGET_MS_SYNC 4
ditto.
LGTM otherwise.
> +#endif
> +
> #endif
> diff --git a/linux-user/hppa/target_mman.h b/linux-user/hppa/target_mman.h
> index 66dd9f7941..f9b6b97032 100644
> --- a/linux-user/hppa/target_mman.h
> +++ b/linux-user/hppa/target_mman.h
> @@ -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
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index a75101fca1..ac8f872371 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -650,7 +650,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 },
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index d58e9b8d10..e541fbe09a 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -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>
> @@ -7667,6 +7668,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))
> @@ -10163,7 +10172,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:
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 7:58 ` Philippe Mathieu-Daudé
@ 2022-12-15 8:15 ` Helge Deller
2022-12-15 15:58 ` Richard Henderson
1 sibling, 0 replies; 8+ messages in thread
From: Helge Deller @ 2022-12-15 8:15 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Laurent Vivier, Richard Henderson, qemu-devel, Ilya Leoshkevich
On 12/15/22 08:58, Philippe Mathieu-Daudé wrote:
> On 15/12/22 08:27, Helge Deller wrote:
>> 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>
>>
>> diff --git a/linux-user/alpha/target_mman.h b/linux-user/alpha/target_mman.h
>> index cd6e3d70a6..051544f5ab 100644
>> --- a/linux-user/alpha/target_mman.h
>> +++ b/linux-user/alpha/target_mman.h
>> @@ -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
>> diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
>> index 1436a3c543..32bf1a52d0 100644
>> --- a/linux-user/generic/target_mman.h
>> +++ b/linux-user/generic/target_mman.h
>> @@ -89,4 +89,17 @@
>> #define TARGET_MADV_DONTNEED_LOCKED 24
>> #endif
>>
>> +
>> +#ifndef TARGET_MS_ASYNC
>> +#define TARGET_MS_ASYNC 1
>
> Hmm don't we want to keep the host flag instead?
>
> #define TARGET_MS_ASYNC MS_ASYNC
Yes, that would be possible, but the value is the same.
In the <arch>/*h files you usually want to have numerical values
which makes it easier to search for conversion bugs.
I'd prefer to keep it as is, it's done for the other
files/values like that.
Helge
>
>> +#endif
>> +
>> +#ifndef TARGET_MS_INVALIDATE
>> +#define TARGET_MS_INVALIDATE 2
>
> Ditto,
>
>> +#endif
>> +
>> +#ifndef TARGET_MS_SYNC
>> +#define TARGET_MS_SYNC 4
>
> ditto.
>
> LGTM otherwise.
>
>> +#endif
>> +
>> #endif
>> diff --git a/linux-user/hppa/target_mman.h b/linux-user/hppa/target_mman.h
>> index 66dd9f7941..f9b6b97032 100644
>> --- a/linux-user/hppa/target_mman.h
>> +++ b/linux-user/hppa/target_mman.h
>> @@ -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
>> diff --git a/linux-user/strace.list b/linux-user/strace.list
>> index a75101fca1..ac8f872371 100644
>> --- a/linux-user/strace.list
>> +++ b/linux-user/strace.list
>> @@ -650,7 +650,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 },
>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
>> index d58e9b8d10..e541fbe09a 100644
>> --- a/linux-user/syscall.c
>> +++ b/linux-user/syscall.c
>> @@ -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>
>> @@ -7667,6 +7668,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))
>> @@ -10163,7 +10172,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:
>>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 7:58 ` Philippe Mathieu-Daudé
2022-12-15 8:15 ` Helge Deller
@ 2022-12-15 15:58 ` Richard Henderson
2022-12-15 20:58 ` Philippe Mathieu-Daudé
1 sibling, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2022-12-15 15:58 UTC (permalink / raw)
To: Philippe Mathieu-Daudé,
Helge Deller, Laurent Vivier, qemu-devel, Ilya Leoshkevich
On 12/14/22 23:58, Philippe Mathieu-Daudé wrote:
>> --- a/linux-user/alpha/target_mman.h
>> +++ b/linux-user/alpha/target_mman.h
>> @@ -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
>> diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
>> index 1436a3c543..32bf1a52d0 100644
>> --- a/linux-user/generic/target_mman.h
>> +++ b/linux-user/generic/target_mman.h
>> @@ -89,4 +89,17 @@
>> #define TARGET_MADV_DONTNEED_LOCKED 24
>> #endif
>>
>> +
>> +#ifndef TARGET_MS_ASYNC
>> +#define TARGET_MS_ASYNC 1
>
> Hmm don't we want to keep the host flag instead?
>
> #define TARGET_MS_ASYNC MS_ASYNC
No. What if the host has an odd value, like Alpha.
r~
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 15:58 ` Richard Henderson
@ 2022-12-15 20:58 ` Philippe Mathieu-Daudé
2022-12-15 23:23 ` Richard Henderson
0 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-12-15 20:58 UTC (permalink / raw)
To: Richard Henderson, Helge Deller, Laurent Vivier, qemu-devel,
Ilya Leoshkevich
On 15/12/22 16:58, Richard Henderson wrote:
> On 12/14/22 23:58, Philippe Mathieu-Daudé wrote:
>>> --- a/linux-user/alpha/target_mman.h
>>> +++ b/linux-user/alpha/target_mman.h
>>> @@ -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
>>> diff --git a/linux-user/generic/target_mman.h
>>> b/linux-user/generic/target_mman.h
>>> index 1436a3c543..32bf1a52d0 100644
>>> --- a/linux-user/generic/target_mman.h
>>> +++ b/linux-user/generic/target_mman.h
>>> @@ -89,4 +89,17 @@
>>> #define TARGET_MADV_DONTNEED_LOCKED 24
>>> #endif
>>>
>>> +
>>> +#ifndef TARGET_MS_ASYNC
>>> +#define TARGET_MS_ASYNC 1
>>
>> Hmm don't we want to keep the host flag instead?
>>
>> #define TARGET_MS_ASYNC MS_ASYNC
>
> No. What if the host has an odd value, like Alpha.
But TARGET_MS_ASYNC would be defined in linux-user/alpha/target_mman.h
so this path won't apply... What am I missing?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 20:58 ` Philippe Mathieu-Daudé
@ 2022-12-15 23:23 ` Richard Henderson
0 siblings, 0 replies; 8+ messages in thread
From: Richard Henderson @ 2022-12-15 23:23 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Helge Deller, Laurent Vivier, qemu-devel@nongnu.org Developers,
Ilya Leoshkevich
[-- Attachment #1: Type: text/plain, Size: 1254 bytes --]
Host!
r~
On Thu, 15 Dec 2022, 12:58 Philippe Mathieu-Daudé, <philmd@linaro.org>
wrote:
> On 15/12/22 16:58, Richard Henderson wrote:
> > On 12/14/22 23:58, Philippe Mathieu-Daudé wrote:
> >>> --- a/linux-user/alpha/target_mman.h
> >>> +++ b/linux-user/alpha/target_mman.h
> >>> @@ -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
> >>> diff --git a/linux-user/generic/target_mman.h
> >>> b/linux-user/generic/target_mman.h
> >>> index 1436a3c543..32bf1a52d0 100644
> >>> --- a/linux-user/generic/target_mman.h
> >>> +++ b/linux-user/generic/target_mman.h
> >>> @@ -89,4 +89,17 @@
> >>> #define TARGET_MADV_DONTNEED_LOCKED 24
> >>> #endif
> >>>
> >>> +
> >>> +#ifndef TARGET_MS_ASYNC
> >>> +#define TARGET_MS_ASYNC 1
> >>
> >> Hmm don't we want to keep the host flag instead?
> >>
> >> #define TARGET_MS_ASYNC MS_ASYNC
> >
> > No. What if the host has an odd value, like Alpha.
>
> But TARGET_MS_ASYNC would be defined in linux-user/alpha/target_mman.h
> so this path won't apply... What am I missing?
>
[-- Attachment #2: Type: text/html, Size: 1914 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 7:27 [PATCH] linux-user: Add translation for argument of msync() Helge Deller
2022-12-15 7:58 ` Philippe Mathieu-Daudé
@ 2023-03-07 16:19 ` Laurent Vivier
2023-03-07 16:21 ` Laurent Vivier
2 siblings, 0 replies; 8+ messages in thread
From: Laurent Vivier @ 2023-03-07 16:19 UTC (permalink / raw)
To: Helge Deller, Richard Henderson, qemu-devel, Ilya Leoshkevich
Le 15/12/2022 à 08:27, Helge Deller a écrit :
> 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>
>
> diff --git a/linux-user/alpha/target_mman.h b/linux-user/alpha/target_mman.h
> index cd6e3d70a6..051544f5ab 100644
> --- a/linux-user/alpha/target_mman.h
> +++ b/linux-user/alpha/target_mman.h
> @@ -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
> diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
> index 1436a3c543..32bf1a52d0 100644
> --- a/linux-user/generic/target_mman.h
> +++ b/linux-user/generic/target_mman.h
> @@ -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
> diff --git a/linux-user/hppa/target_mman.h b/linux-user/hppa/target_mman.h
> index 66dd9f7941..f9b6b97032 100644
> --- a/linux-user/hppa/target_mman.h
> +++ b/linux-user/hppa/target_mman.h
> @@ -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
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index a75101fca1..ac8f872371 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -650,7 +650,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 },
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index d58e9b8d10..e541fbe09a 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -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>
> @@ -7667,6 +7668,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))
> @@ -10163,7 +10172,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:
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] linux-user: Add translation for argument of msync()
2022-12-15 7:27 [PATCH] linux-user: Add translation for argument of msync() Helge Deller
2022-12-15 7:58 ` Philippe Mathieu-Daudé
2023-03-07 16:19 ` Laurent Vivier
@ 2023-03-07 16:21 ` Laurent Vivier
2 siblings, 0 replies; 8+ messages in thread
From: Laurent Vivier @ 2023-03-07 16:21 UTC (permalink / raw)
To: Helge Deller, Richard Henderson, qemu-devel, Ilya Leoshkevich
Le 15/12/2022 à 08:27, Helge Deller a écrit :
> 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>
>
> diff --git a/linux-user/alpha/target_mman.h b/linux-user/alpha/target_mman.h
> index cd6e3d70a6..051544f5ab 100644
> --- a/linux-user/alpha/target_mman.h
> +++ b/linux-user/alpha/target_mman.h
> @@ -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
> diff --git a/linux-user/generic/target_mman.h b/linux-user/generic/target_mman.h
> index 1436a3c543..32bf1a52d0 100644
> --- a/linux-user/generic/target_mman.h
> +++ b/linux-user/generic/target_mman.h
> @@ -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
> diff --git a/linux-user/hppa/target_mman.h b/linux-user/hppa/target_mman.h
> index 66dd9f7941..f9b6b97032 100644
> --- a/linux-user/hppa/target_mman.h
> +++ b/linux-user/hppa/target_mman.h
> @@ -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
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index a75101fca1..ac8f872371 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -650,7 +650,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 },
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index d58e9b8d10..e541fbe09a 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -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>
> @@ -7667,6 +7668,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))
> @@ -10163,7 +10172,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:
>
Applied to my linux-user-for-8.0 branch.
Thanks,
Laurent
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-03-07 16:22 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-15 7:27 [PATCH] linux-user: Add translation for argument of msync() Helge Deller
2022-12-15 7:58 ` Philippe Mathieu-Daudé
2022-12-15 8:15 ` Helge Deller
2022-12-15 15:58 ` Richard Henderson
2022-12-15 20:58 ` Philippe Mathieu-Daudé
2022-12-15 23:23 ` Richard Henderson
2023-03-07 16:19 ` Laurent Vivier
2023-03-07 16:21 ` Laurent Vivier
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.