aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Musta <tommusta@gmail.com>2014-08-12 13:53:35 -0500
committerRiku Voipio <riku.voipio@linaro.org>2014-08-22 15:06:34 +0300
commit37ed09560c51465c3b8a659b9d18d43e75726c04 (patch)
treebc887481fcc54d25a8c7ba7ec58b4ef763fd9394
parent5464baecf521d1ca8095604f5a7371443c94226a (diff)
downloadqemu-arm-37ed09560c51465c3b8a659b9d18d43e75726c04.tar.gz
linux-user: Make ipc syscall's third argument an abi_long
For those target ABIs that use the ipc system call (e.g. POWER), the third argument is used in the shmat path as a pointer. It therefore must be declared as an abi_long (versus int) so that the address bits are not lost in truncation. In fact, all arguments to do_ipc should be declared as abit_long. In fact, it makes more sense for all of the arguments to be declaried as abi_long (except call). Signed-off-by: Tom Musta <tommusta@gmail.com> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
-rw-r--r--linux-user/syscall.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 39ab4c7942..fa8ba8fe7c 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3130,8 +3130,8 @@ static inline abi_long do_shmdt(abi_ulong shmaddr)
#ifdef TARGET_NR_ipc
/* ??? This only works with linear mappings. */
/* do_ipc() must return target values and target errnos. */
-static abi_long do_ipc(unsigned int call, int first,
- int second, int third,
+static abi_long do_ipc(unsigned int call, abi_long first,
+ abi_long second, abi_long third,
abi_long ptr, abi_long fifth)
{
int version;
@@ -3153,9 +3153,9 @@ static abi_long do_ipc(unsigned int call, int first,
/* The semun argument to semctl is passed by value, so dereference the
* ptr argument. */
abi_ulong atptr;
- get_user_ual(atptr, (abi_ulong)ptr);
+ get_user_ual(atptr, ptr);
ret = do_semctl(first, second, third,
- (union target_semun)(abi_ulong) atptr);
+ (union target_semun) atptr);
break;
}