All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
@ 2018-01-24  9:14 Guido Günther
  2018-01-24  9:36 ` Laurent Vivier
  2018-01-24  9:59 ` Laurent Vivier
  0 siblings, 2 replies; 4+ messages in thread
From: Guido Günther @ 2018-01-24  9:14 UTC (permalink / raw)
  To: Laurent Vivier
  Cc: Philippe Mathieu-Daudé, Riku Voipio, qemu-devel, qemu-arm

Unbreaks the testcase from

    http://lists.nongnu.org/archive/html/qemu-arm/2018-01/msg00514.html

Signed-off-by: Guido Günther <agx@sigxcpu.org>
---
 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
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
  2018-01-24  9:14 [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64 Guido Günther
@ 2018-01-24  9:36 ` Laurent Vivier
  2018-01-24  9:59 ` Laurent Vivier
  1 sibling, 0 replies; 4+ messages in thread
From: Laurent Vivier @ 2018-01-24  9:36 UTC (permalink / raw)
  To: Guido Günther
  Cc: Philippe Mathieu-Daudé,
	Riku Voipio, qemu-devel, qemu-arm, Richard Henderson

CC: Richard has he wrote this code.

Thanks,
Laurent

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 <agx@sigxcpu.org>
> ---
>  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
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
  2018-01-24  9:14 [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64 Guido Günther
  2018-01-24  9:36 ` Laurent Vivier
@ 2018-01-24  9:59 ` Laurent Vivier
  2018-01-24 10:15   ` Guido Günther
  1 sibling, 1 reply; 4+ messages in thread
From: Laurent Vivier @ 2018-01-24  9:59 UTC (permalink / raw)
  To: Guido Günther
  Cc: Philippe Mathieu-Daudé,
	Riku Voipio, qemu-devel, qemu-arm, Richard Henderson

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 <agx@sigxcpu.org>
> ---
>  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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64
  2018-01-24  9:59 ` Laurent Vivier
@ 2018-01-24 10:15   ` Guido Günther
  0 siblings, 0 replies; 4+ messages in thread
From: Guido Günther @ 2018-01-24 10:15 UTC (permalink / raw)
  To: Laurent Vivier
  Cc: Philippe Mathieu-Daudé,
	Riku Voipio, qemu-devel, qemu-arm, Richard Henderson

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 <agx@sigxcpu.org>
> > ---
> >  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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-01-24 10:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-24  9:14 [Qemu-devel] [PATCH] linux-user: Fix register used for 6th syscall argument on aarch64 Guido Günther
2018-01-24  9:36 ` Laurent Vivier
2018-01-24  9:59 ` Laurent Vivier
2018-01-24 10:15   ` Guido Günther

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.