[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