diff mbox

[V3,04/13] linux-user: Make ipc syscall's third argument an abi_long

Message ID 1407956688-16006-5-git-send-email-tommusta@gmail.com
State New
Headers show

Commit Message

Tom Musta Aug. 13, 2014, 7:04 p.m. UTC
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 declared
as abi_long (except call).

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
V2: Changed all do_ipc arguments (except "call") to abi_long per Peter
Maydell's review.

 linux-user/syscall.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index bee1f4e..3a4f432 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3125,8 +3125,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;
@@ -3148,9 +3148,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;
     }