qemu-arm
[Top][All Lists]
Advanced

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

Re: [Qemu-arm] [PATCH] linux-user: Fix register used for 6th syscall arg


From: Laurent Vivier
Subject: Re: [Qemu-arm] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
Date: Wed, 24 Jan 2018 10:59:05 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2

Le 24/01/2018 à 10:14, Guido Günther a écrit :
> Unbreaks the testcase from
> 
>     http://lists.nongnu.org/archive/html/qemu-arm/2018-01/msg00514.html
> 
> Signed-off-by: Guido Günther <address@hidden>
> ---
>  linux-user/host/aarch64/safe-syscall.inc.S | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/linux-user/host/aarch64/safe-syscall.inc.S 
> b/linux-user/host/aarch64/safe-syscall.inc.S
> index 58a2329b37..e4fbc31454 100644
> --- a/linux-user/host/aarch64/safe-syscall.inc.S
> +++ b/linux-user/host/aarch64/safe-syscall.inc.S
> @@ -36,7 +36,7 @@ safe_syscall_base:
>        *               and return the result in x0
>        * and the syscall instruction needs
>        *               x8 == syscall number
> -      *               x0 ... x7 == syscall arguments
> +      *               x0 ... x5 == syscall arguments
>        *               and returns the result in x0
>        * Shuffle everything around appropriately.
>        */
> @@ -47,7 +47,7 @@ safe_syscall_base:
>       mov     x2, x4
>       mov     x3, x5
>       mov     x4, x6
> -     mov     x6, x7
> +     mov     x5, x7
>       ldr     x7, [sp]
>  
>       /* This next sequence of code works in conjunction with the
> 

According to glibc/unix/sysv/linux/aarch64/syscall.S:

  AArch64 system calls take between 0 and 7 arguments.
  ... and any other system call arguments are in register x1..x7.

And it seems for qemu last argument is on the stack.
...
         x2 ... x7, (stack) == syscall arguments
...

Should we have something like this?

@@ -47,8 +47,8 @@ safe_syscall_base:
        mov     x2, x4
        mov     x3, x5
        mov     x4, x6
-       mov     x6, x7
-       ldr     x7, [sp]
+       mov     x5, x7
+       ldr     x6, [sp]

        /* This next sequence of code works in conjunction with the
         * rewind_if_safe_syscall_function(). If a signal is taken

But do we need to set x7 from the stack too?

Thanks,
Laurent




reply via email to

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