[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 11/12] linux-user: Support target-to-host translation
From: |
Tom Musta |
Subject: |
[Qemu-ppc] [PATCH 11/12] linux-user: Support target-to-host translation of mlockall argument |
Date: |
Mon, 4 Aug 2014 11:45:38 -0500 |
The argument to the mlockall system call is not necessarily the same on
all platforms and thus may require translation prior to passing to the
host.
For example, PowerPC 64 bit platforms define values for MCL_CURRENT
(0x2000) and MCL_FUTURE (0x4000) which are different from Intel platforms
(0x1 and 0x2, respectively)
Signed-off-by: Tom Musta <address@hidden>
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5660520..fea54be 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4934,6 +4934,34 @@ static inline abi_long
host_to_target_itimerspec(abi_ulong target_addr,
return 0;
}
+#if defined(TARGET_NR_mlockall)
+
+#if defined(TARGET_PPC64)
+#define TARGET_MLOCKALL_MCL_CURRENT 0x2000
+#define TARGET_MLOCKALL_MCL_FUTURE 0x4000
+#endif
+
+static inline int target_to_host_mlockall_arg(int arg)
+{
+ int result = 0;
+
+#ifdef TARGET_MLOCKALL_MCL_CURRENT
+ if (arg & TARGET_MLOCKALL_MCL_CURRENT) {
+ result |= MCL_CURRENT;
+ arg ^= TARGET_MLOCKALL_MCL_CURRENT;
+ }
+#endif
+#ifdef TARGET_MLOCKALL_MCL_FUTURE
+ if (arg & TARGET_MLOCKALL_MCL_FUTURE) {
+ result |= MCL_FUTURE;
+ arg ^= TARGET_MLOCKALL_MCL_FUTURE;
+ }
+#endif
+ result |= arg;
+ return result;
+}
+#endif
+
#if defined(TARGET_NR_stat64) || defined(TARGET_NR_newfstatat)
static inline abi_long host_to_target_stat64(void *cpu_env,
abi_ulong target_addr,
@@ -6783,7 +6811,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
#endif
#ifdef TARGET_NR_mlockall
case TARGET_NR_mlockall:
- ret = get_errno(mlockall(arg1));
+ ret = get_errno(mlockall(target_to_host_mlockall_arg(arg1)));
break;
#endif
#ifdef TARGET_NR_munlockall
--
1.7.1
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 07/12] linux-user: Handle NULL argument to sched_{get, set}param, (continued)
- [Qemu-ppc] [PATCH 08/12] linux-user: Detect fault in sched_rr_get_interval, Tom Musta, 2014/08/04
- [Qemu-ppc] [PATCH 09/12] linux-user: Minimum Sig Handler Stack Size for PPC64 ELF V2, Tom Musta, 2014/08/04
- [Qemu-ppc] [PATCH 10/12] linux-user: clock_nanosleep errno Handling on PPC, Tom Musta, 2014/08/04
- [Qemu-ppc] [PATCH 11/12] linux-user: Support target-to-host translation of mlockall argument,
Tom Musta <=
- [Qemu-ppc] [PATCH 12/12] linux-user: writev Partial Writes, Tom Musta, 2014/08/04
- Re: [Qemu-ppc] [Qemu-devel] [PATCH 00/12] target-ppc: Linux-User Mode Bug Fixes for Power, Riku Voipio, 2014/08/12