| From d24449864da5838936669618356b0e30ca2999c3 Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@kernel.org> |
| Date: Sun, 8 Sep 2024 00:40:38 +0200 |
| Subject: parisc: Fix 64-bit userspace syscall path |
| |
| From: Helge Deller <deller@kernel.org> |
| |
| commit d24449864da5838936669618356b0e30ca2999c3 upstream. |
| |
| Currently the glibc isn't yet ported to 64-bit for hppa, so |
| there is no usable userspace available yet. |
| But it's possible to manually build a static 64-bit binary |
| and run that for testing. One such 64-bit test program is |
| available at http://ftp.parisc-linux.org/src/64bit.tar.gz |
| and it shows various issues with the existing 64-bit syscall |
| path in the kernel. |
| This patch fixes those issues. |
| |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Cc: stable@vger.kernel.org # v4.19+ |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/parisc/kernel/syscall.S | 14 ++++++++------ |
| 1 file changed, 8 insertions(+), 6 deletions(-) |
| |
| --- a/arch/parisc/kernel/syscall.S |
| +++ b/arch/parisc/kernel/syscall.S |
| @@ -232,10 +232,10 @@ linux_gateway_entry: |
| |
| #ifdef CONFIG_64BIT |
| ldil L%sys_call_table, %r1 |
| - or,= %r2,%r2,%r2 |
| - addil L%(sys_call_table64-sys_call_table), %r1 |
| + or,ev %r2,%r2,%r2 |
| + ldil L%sys_call_table64, %r1 |
| ldo R%sys_call_table(%r1), %r19 |
| - or,= %r2,%r2,%r2 |
| + or,ev %r2,%r2,%r2 |
| ldo R%sys_call_table64(%r1), %r19 |
| #else |
| load32 sys_call_table, %r19 |
| @@ -368,10 +368,10 @@ tracesys_next: |
| extrd,u %r19,63,1,%r2 /* W hidden in bottom bit */ |
| |
| ldil L%sys_call_table, %r1 |
| - or,= %r2,%r2,%r2 |
| - addil L%(sys_call_table64-sys_call_table), %r1 |
| + or,ev %r2,%r2,%r2 |
| + ldil L%sys_call_table64, %r1 |
| ldo R%sys_call_table(%r1), %r19 |
| - or,= %r2,%r2,%r2 |
| + or,ev %r2,%r2,%r2 |
| ldo R%sys_call_table64(%r1), %r19 |
| #else |
| load32 sys_call_table, %r19 |
| @@ -1310,6 +1310,8 @@ ENTRY(sys_call_table) |
| END(sys_call_table) |
| |
| #ifdef CONFIG_64BIT |
| +#undef __SYSCALL_WITH_COMPAT |
| +#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) |
| .align 8 |
| ENTRY(sys_call_table64) |
| #include <asm/syscall_table_64.h> /* 64-bit syscalls */ |