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>
This commit is contained in:
parent
5464baecf5
commit
37ed09560c
@ -3130,8 +3130,8 @@ static inline abi_long do_shmdt(abi_ulong shmaddr)
|
|||||||
#ifdef TARGET_NR_ipc
|
#ifdef TARGET_NR_ipc
|
||||||
/* ??? This only works with linear mappings. */
|
/* ??? This only works with linear mappings. */
|
||||||
/* do_ipc() must return target values and target errnos. */
|
/* do_ipc() must return target values and target errnos. */
|
||||||
static abi_long do_ipc(unsigned int call, int first,
|
static abi_long do_ipc(unsigned int call, abi_long first,
|
||||||
int second, int third,
|
abi_long second, abi_long third,
|
||||||
abi_long ptr, abi_long fifth)
|
abi_long ptr, abi_long fifth)
|
||||||
{
|
{
|
||||||
int version;
|
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
|
/* The semun argument to semctl is passed by value, so dereference the
|
||||||
* ptr argument. */
|
* ptr argument. */
|
||||||
abi_ulong atptr;
|
abi_ulong atptr;
|
||||||
get_user_ual(atptr, (abi_ulong)ptr);
|
get_user_ual(atptr, ptr);
|
||||||
ret = do_semctl(first, second, third,
|
ret = do_semctl(first, second, third,
|
||||||
(union target_semun)(abi_ulong) atptr);
|
(union target_semun) atptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user