]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
parisc: Fix 64-bit userspace syscall path
authorHelge Deller <deller@kernel.org>
Sat, 7 Sep 2024 22:40:38 +0000 (00:40 +0200)
committerHelge Deller <deller@gmx.de>
Mon, 9 Sep 2024 06:53:17 +0000 (08:53 +0200)
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+
arch/parisc/kernel/syscall.S

index 1f51aa9c8230cc369226e9c7e0a97e143303b12d..0fa81bf1466b15830582d4113c99e7277fee4ae1 100644 (file)
@@ -243,10 +243,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
@@ -379,10 +379,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
@@ -1327,6 +1327,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 */