qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [V2 PATCH 04/12] linux-user: Make ipc syscall's third a


From: David Gibson
Subject: Re: [Qemu-devel] [V2 PATCH 04/12] linux-user: Make ipc syscall's third argument an abi_long
Date: Tue, 26 Aug 2014 10:39:34 +1000
User-agent: Mutt/1.5.23 (2014-03-12)

On Tue, Aug 12, 2014 at 01:53:35PM -0500, Tom Musta wrote:
> 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 <address@hidden>
> ---
> V2: Changed all do_ipc arguments (except "call") to abi_long per Peter
> Maydell's review.

So, that certainly makes sense for second and third.  But 'first'
really is defined as 'int' in the kernel source; what's the reason for
using a long here?

> 
>  linux-user/syscall.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> 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;
>      }
>  

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: pgpWWZZ64vb00.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]