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: Guido Günther
Subject: Re: [Qemu-arm] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
Date: Wed, 24 Jan 2018 11:15:25 +0100
User-agent: Mutt/1.9.2 (2017-12-15)

Hi,
On Wed, Jan 24, 2018 at 10:59:05AM +0100, Laurent Vivier wrote:
> 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?

That makes sense. The maximum number of arguments in
linux-user/syscall.c is syscall6 so we won't notice but it's better to
have this correct, I'll send an updated patch.
Cheers
 -- Guido



reply via email to

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