mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Magnus Lindholm <linmag7@gmail.com>
To: richard.henderson@linaro.org, mattst88@gmail.com,
	linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org
Cc: linmag7@gmail.com
Subject: [PATCH 06/14] alpha: dispatch system calls from C
Date: Tue,  3 Nov 2026 22:35:12 +0100	[thread overview]
Message-ID: <20261103214120.1099893-7-linmag7@gmail.com> (raw)
In-Reply-To: <20261103214120.1099893-1-linmag7@gmail.com>

Move syscall dispatch and result encoding into alpha_syscall(), keeping
the complete user switch_stack available throughout the C call. Use the
generic fork/clone handlers and remove the assembly dispatch and sigreturn
wrappers. Preserve Alpha's r0/a3 ABI, ptrace/seccomp overrides and restored
signal contexts.

The syscall table names also enable tracepoints for fork, vfork, clone,
clone3, sigreturn and rt_sigreturn.

Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
---
 arch/alpha/include/asm/syscall.h       |  18 +----
 arch/alpha/include/asm/thread_info.h   |   1 +
 arch/alpha/kernel/Makefile             |   2 +-
 arch/alpha/kernel/asm-offsets.c        |   1 -
 arch/alpha/kernel/entry.S              | 132 +--------------------------------
 arch/alpha/kernel/proto.h              |  10 +--
 arch/alpha/kernel/signal.c             | 126 +++----------------------------
 arch/alpha/kernel/syscall.c            |  85 +++++++++++++++++++++
 arch/alpha/kernel/syscalls/syscall.tbl |  10 +--
 9 files changed, 113 insertions(+), 272 deletions(-)

diff --git a/arch/alpha/include/asm/syscall.h b/arch/alpha/include/asm/syscall.h
index 52fa96ea57caba5f04c2c0c3d9ea31b909eb9f60..740ac96cef55d28bcf45251fc722b35421a9f2d5 100644
--- a/arch/alpha/include/asm/syscall.h
+++ b/arch/alpha/include/asm/syscall.h
@@ -29,12 +29,8 @@ static inline long syscall_get_error(struct task_struct *task,
 
 
 /*
- * Alpha syscall ABI / kernel conventions:
- *  - PAL provides syscall number in r0 on entry.
- *  - The kernel tracks the active syscall number in regs->r1 (mutable) and
- *    preserves the original syscall number in regs->r2 for rollback/restart.
- *  - Return value is in regs->r0, with regs->r19 ("a3") as the error flag
- *    (0=success, 1=error; on error regs->r0 holds positive errno).
+ * The syscall number arrives in r0. Entry saves the original in thread_info
+ * for rollback and restart, while tracers can change the number in r1.
  */
 
 static inline long syscall_get_nr(struct task_struct *task,
@@ -80,14 +76,8 @@ static inline void syscall_set_arguments(struct task_struct *task,
 	regs->r21 = args[5];
 }
 /*
- * Set return value for a syscall.
- * Alpha uses r0 for return value and r19 ("a3") as the error indicator:
- *   a3 = 0 => success
- *   a3 = 1 => error, and userspace interprets r0 as errno (positive).
- *
- * The kernel reports errors to userspace by setting a3=1 and placing a
- * positive errno value in r0. Some syscall paths do this in entry.S,
- * while others (e.g. seccomp/ptrace helpers) use syscall_set_return_value().
+ * On error, r0 holds a positive errno and a3 is set.
+ * On success, r0 holds the result and a3 is clear.
  */
 
 static inline void syscall_set_return_value(struct task_struct *task,
diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/thread_info.h
index 78f9f60d4ad197c27cd05bfd6a5c20af22bee7a3..94bdf9016705cc6b0aea64c3f601de3ef555eb7b 100644
--- a/arch/alpha/include/asm/thread_info.h
+++ b/arch/alpha/include/asm/thread_info.h
@@ -57,6 +57,7 @@ register unsigned long *current_stack_pointer __asm__ ("$30");
 
 #define ALPHA_SYSCALL_META_SKIP			0x2
 #define ALPHA_SYSCALL_META_FORCE_SUCCESS	0x4
+#define ALPHA_SYSCALL_META_RESTORED		0x8
 #define ALPHA_SYSCALL_META_ROLLBACK		0x10
 #define ALPHA_SYSCALL_META_RESULT			0x20
 
diff --git a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile
index 9d35715bd440518b327ad576b78ad35f61433bab..668556d8496c0c3ee03996cf5a4a0ee56b980891 100644
--- a/arch/alpha/kernel/Makefile
+++ b/arch/alpha/kernel/Makefile
@@ -8,7 +8,7 @@ asflags-y	:= $(KBUILD_CFLAGS)
 ccflags-y	:= -Wno-sign-compare
 
 obj-y    := head.o entry.o traps.o process.o osf_sys.o irq.o \
-	    irq_alpha.o signal.o setup.o ptrace.o time.o \
+	    irq_alpha.o signal.o syscall.o setup.o ptrace.o time.o \
 	    systbls.o err_common.o io.o bugs.o termios.o \
 	    stacktrace.o
 
diff --git a/arch/alpha/kernel/asm-offsets.c b/arch/alpha/kernel/asm-offsets.c
index 22ed3c975b1ceb014806fec5d2afc2140ac3e03a..b575dcf367bfde210fa19bd955f1163877b752d6 100644
--- a/arch/alpha/kernel/asm-offsets.c
+++ b/arch/alpha/kernel/asm-offsets.c
@@ -22,7 +22,6 @@ static void __used foo(void)
 
 	DEFINE(SP_OFF, offsetof(struct pt_regs, ps));
 	DEFINE(SIZEOF_PT_REGS, sizeof(struct pt_regs));
-	DEFINE(TI_SYSCALL_META, offsetof(struct thread_info, syscall_meta));
 	BLANK();
 
 	DEFINE(SWITCH_STACK_SIZE, sizeof(struct switch_stack));
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S
index 790389a15c3ce15d5b8eeae5a67e88443e5430a0..d67ccfc8abac4b97ceb6fa8c7bad8024b9bf5660 100644
--- a/arch/alpha/kernel/entry.S
+++ b/arch/alpha/kernel/entry.S
@@ -8,9 +8,6 @@
 #include <asm/asm-offsets.h>
 #include <asm/thread_info.h>
 #include <asm/pal.h>
-#include <asm/errno.h>
-#include <asm/unistd.h>
-#include <linux/errno.h>
 
 	.text
 	.set noat
@@ -473,9 +470,6 @@ CFI_END_OSF_FRAME entDbg
 	.cfi_rel_offset	$gp, 16
 entSys:
 	SAVE_ALL
-	ldq	$1, 0($sp)	/* syscall nr from saved r0 */
-	stq	$1, 8($sp)	/* regs->r1 = shadow syscall nr */
-
 	lda	$8, 0x3fff
 	bic	$sp, $8, $8
 
@@ -483,47 +477,13 @@ entSys:
 	stq	$17, SP_OFF+32($sp)
 	stq	$18, SP_OFF+40($sp)
 
-	mov	$0, $1
 	lda	$16, 7
 	call_pal PAL_swpipl
-	mov	$1, $0
 	mov	$sp, $16
-	mov	$0, $17	 /* pv = selected syscall function */
-
-	DO_SWITCH_STACK
-	jsr	$26, alpha_syscall_enter_select
-	ldgp	$gp, 0($26)
-	UNDO_SWITCH_STACK
-
-	/*
-	 * C returned syscall function pointer in $0.
-	 * It also stored SKIP in TI_SYSCALL_META if dispatch is skipped.
-	 */
-	lda	$8, 0x3fff
-	bic	$sp, $8, $8
-	ldq	$3, TI_SYSCALL_META($8)
-	lda	$6, ALPHA_SYSCALL_META_SKIP
-	and	$3, $6, $6
-	bne	$6, skip_dispatch
-
-
-	mov	$0, $27
-	ldq	$16, SP_OFF+24($sp)
-	ldq	$17, SP_OFF+32($sp)
-	ldq	$18, SP_OFF+40($sp)
-	ldq	$19, 72($sp)
-	ldq	$20, 80($sp)
-	ldq	$21, 88($sp)
-
-	jsr	$26, ($27), sys_ni_syscall
-	ldgp	$gp, 0($26)
-
-skip_dispatch:
-	mov	$0, $17		/* raw ret; ignored if SKIP is set */
-	mov	$sp, $16	/* regs */
 
+	/* Keep the complete user context above all C call frames. */
 	DO_SWITCH_STACK
-	jsr	$26, alpha_finish_syscall_to_user_mode
+	jsr	$26, alpha_syscall
 	ldgp	$gp, 0($26)
 	UNDO_SWITCH_STACK
 
@@ -538,25 +498,6 @@ restore_other:
 	RESTORE_ALL
 	call_pal PAL_rti
 
-ret_to_user_from_syscall:
-	lda	$8, 0x3fff
-	bic	$sp, $8, $8
-
-	mov	$sp, $16
-	DO_SWITCH_STACK
-	jsr	$26, alpha_syscall_exit_to_user_mode
-	ldgp	$gp, 0($26)
-	UNDO_SWITCH_STACK
-	br	restore_all
-
-	.align	4
-	.globl	ret_from_sys_call
-ret_from_sys_call:
-	ldq	$0, SP_OFF($sp)
-	and	$0, 8, $0
-	beq	$0, ret_to_kernel
-	br	ret_to_user_from_syscall
-
 ret_from_exception:
 	ldq	$0, SP_OFF($sp)
 	and	$0, 8, $0
@@ -720,72 +661,3 @@ ret_from_kernel_thread:
 	jsr	$26, ($9)
 	br	$31, ret_to_user_from_exception
 .end ret_from_kernel_thread
-
-\f
-/*
- * Special system calls.  Most of these are special in that they either
- * have to play switch_stack games.
- */
-
-.macro	fork_like name
-	.align	4
-	.globl	alpha_\name
-	.ent	alpha_\name
-alpha_\name:
-	.prologue 0
-	bsr	$1, do_switch_stack
-	// NB: if anyone adds preemption, this block will need to be protected
-	ldl	$1, TI_STATUS($8)
-	and	$1, TS_SAVED_FP, $3
-	or	$1, TS_SAVED_FP, $2
-	bne	$3, 1f
-	stl	$2, TI_STATUS($8)
-	bsr	$26, __save_fpu
-1:
-	jsr	$26, sys_\name
-	ldq	$26, 56($sp)
-	lda	$sp, SWITCH_STACK_SIZE($sp)
-	ret
-.end	alpha_\name
-.endm
-
-fork_like fork
-fork_like vfork
-fork_like clone
-fork_like clone3
-
-.macro	sigreturn_like name
-	.align	4
-	.globl	sys_\name
-	.ent	sys_\name
-sys_\name:
-	.prologue 0
-	mov	$sp, $10
-	lda	$sp, -SWITCH_STACK_SIZE($sp)
-	jsr	$26, do_\name
-1:	br	$1, undo_switch_stack
-	br	ret_from_sys_call
-.end sys_\name
-.endm
-
-sigreturn_like sigreturn
-sigreturn_like rt_sigreturn
-
-	.align	4
-	.globl	alpha_syscall_zero
-	.ent	alpha_syscall_zero
-alpha_syscall_zero:
-	.prologue 0
-	/* Special because it needs to do something opposite to
-	   force_successful_syscall_return().  We use the saved
-	   syscall number for that, zero meaning "not an error".
-	   That works nicely, but for real syscall 0 we need to
-	   make sure that this logics doesn't get confused.
-	   Store a non-zero there - -ENOSYS we need in register
-	   for our return value will do just fine.
-	  */
-	lda	$0, -ENOSYS
-	unop
-	stq	$0, 0($sp)
-	ret
-.end alpha_syscall_zero
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h
index 7ece3b635e27ca04fb8fa93d9118e8be9a225b66..90af335cd6798ad4039ecc2a3c67505eadbd32a2 100644
--- a/arch/alpha/kernel/proto.h
+++ b/arch/alpha/kernel/proto.h
@@ -169,16 +169,12 @@ extern int ptrace_set_bpt (struct task_struct *child);
 extern int ptrace_cancel_bpt (struct task_struct *child);
 
 /* signal.c */
-struct sigcontext;
-extern void do_sigreturn(struct sigcontext __user *);
-struct rt_sigframe;
-extern void do_rt_sigreturn(struct rt_sigframe __user *);
 extern void alpha_schedule_user_work(void);
 extern void do_signal(struct pt_regs *regs, unsigned long r0, unsigned long r19);
-extern void alpha_syscall_exit_to_user_mode(struct pt_regs *regs);
 extern void alpha_exit_to_user_mode(struct pt_regs *regs);
-extern void alpha_finish_syscall_to_user_mode(struct pt_regs *regs, long ret);
-extern unsigned long alpha_syscall_enter_select(struct pt_regs *regs, long syscall);
+
+/* syscall.c */
+extern void alpha_syscall(struct pt_regs *regs);
 
 /* traps.c */
 extern void dik_show_regs(struct pt_regs *regs, unsigned long *r9_15);
diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c
index f972f690eb678b9201e340624a60fe26ad7f23c8..c6dd0f2864ade320d59cf1531764640bc6713aa6 100644
--- a/arch/alpha/kernel/signal.c
+++ b/arch/alpha/kernel/signal.c
@@ -34,8 +34,6 @@
 
 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 
-asmlinkage void ret_from_sys_call(void);
-
 /*
  * The OSF/1 sigprocmask calling sequence is different from the
  * C sigprocmask() sequence..
@@ -157,8 +155,6 @@ restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs)
 	current_thread_info()->syscall_saved_nr = 0;
 	current_thread_info()->status |= TS_SAVED_FP | TS_RESTORE_FP;
 
-	sw->r26 = (unsigned long) ret_from_sys_call;
-
 	scoped_user_read_access(sc, Efault) {
 		unsafe_get_user(regs->pc, &sc->sc_pc, Efault);
 		unsafe_get_user(regs->r0, sc->sc_regs+0, Efault);
@@ -207,12 +203,14 @@ Efault:
    a given sigcontext.  This because it's impossible to set *all*
    registers and transfer control from userland.  */
 
-asmlinkage void
-do_sigreturn(struct sigcontext __user *sc)
+SYSCALL_DEFINE1(sigreturn, struct sigcontext __user *, sc)
 {
 	struct pt_regs *regs = current_pt_regs();
 	sigset_t set;
 
+	/* The restored r0/r19 are user state, not a syscall result. */
+	current_thread_info()->syscall_meta |= ALPHA_SYSCALL_META_RESTORED;
+
 	scoped_user_read_access(sc, give_sigsegv)
 		unsafe_get_user(set.sig[0], &sc->sc_mask, give_sigsegv);
 
@@ -226,18 +224,21 @@ do_sigreturn(struct sigcontext __user *sc)
 		send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *) regs->pc,
 			       current);
 	}
-	return;
+	return 0;
 
 give_sigsegv:
 	force_sig(SIGSEGV);
+	return 0;
 }
 
-asmlinkage void
-do_rt_sigreturn(struct rt_sigframe __user *frame)
+SYSCALL_DEFINE1(rt_sigreturn, struct rt_sigframe __user *, frame)
 {
 	struct pt_regs *regs = current_pt_regs();
 	sigset_t set;
 
+	/* The restored r0/r19 are user state, not a syscall result. */
+	current_thread_info()->syscall_meta |= ALPHA_SYSCALL_META_RESTORED;
+
 	/* Verify that it's a good ucontext_t before using it */
 	if (!access_ok(&frame->uc, sizeof(frame->uc)))
 		goto give_sigsegv;
@@ -254,10 +255,11 @@ do_rt_sigreturn(struct rt_sigframe __user *frame)
 		send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *) regs->pc,
 			       current);
 	}
-	return;
+	return 0;
 
 give_sigsegv:
 	force_sig(SIGSEGV);
+	return 0;
 }
 
 
@@ -543,16 +545,6 @@ asmlinkage void alpha_exit_to_user_mode(struct pt_regs *regs)
 	exit_to_user_mode();
 }
 
-/*
- * Syscall return reaches here after Alpha-specific r0/a3 result encoding.
- * Delegate syscall-exit work and final exit-to-user handling to generic
- * entry code; low-level PAL restore remains in assembly.
- */
-asmlinkage void alpha_syscall_exit_to_user_mode(struct pt_regs *regs)
-{
-	syscall_exit_to_user_mode(regs);
-}
-
 void arch_do_signal_or_restart(struct pt_regs *regs)
 {
 	struct thread_info *ti = current_thread_info();
@@ -562,97 +554,3 @@ void arch_do_signal_or_restart(struct pt_regs *regs)
 	preempt_enable();
 	do_signal(regs, ti->syscall_saved_nr, ti->syscall_saved_r19);
 }
-
-asmlinkage unsigned long
-alpha_syscall_enter_select(struct pt_regs *regs, long syscall)
-{
-	struct thread_info *ti = current_thread_info();
-	unsigned long saved_r19 = regs->r19;
-	unsigned long fn = (unsigned long)sys_ni_syscall;
-	long nr = syscall;
-	bool permit;
-
-	ti->syscall_meta = 0;
-	ti->syscall_saved_nr = syscall;
-	ti->syscall_saved_r19 = saved_r19;
-
-	if (!(ti->status & TS_SAVED_FP)) {
-		ti->status |= TS_SAVED_FP;
-		__save_fpu();
-	}
-
-	permit = syscall_enter_from_user_mode_randomize_stack(regs, &nr);
-
-	if (unlikely(!permit || nr == -1)) {
-		/* r19 is still argument 4 unless a hook supplied a result. */
-		if (!(ti->syscall_meta & (ALPHA_SYSCALL_META_RESULT |
-					 ALPHA_SYSCALL_META_ROLLBACK)))
-			syscall_set_return_value(current, regs, -ENOSYS, 0);
-
-		ti->syscall_meta |= ALPHA_SYSCALL_META_SKIP;
-		return fn;	/* ignored by asm when SKIP is set */
-	}
-
-	/* Invalid numbers other than -1 must invoke sys_ni_syscall(). */
-	if (unlikely((unsigned long)nr >= NR_syscalls))
-		return fn;
-
-	instrumentation_begin();
-	{
-		unsigned long index;
-
-		index = array_index_nospec((unsigned long)nr, NR_syscalls);
-		fn = (unsigned long)sys_call_table[index];
-	}
-	instrumentation_end();
-
-	return fn;
-}
-
-asmlinkage noinstr void
-alpha_finish_syscall_to_user_mode(struct pt_regs *regs, long ret)
-{
-	struct thread_info *ti = current_thread_info();
-	unsigned long meta = ti->syscall_meta;
-
-	ti->syscall_meta = 0;
-	/* Entry work may have replaced argument 4 with the a3 error flag. */
-	if (!(meta & ALPHA_SYSCALL_META_SKIP))
-		ti->syscall_saved_r19 = regs->r19;
-
-	instrumentation_begin();
-
-	if (meta & ALPHA_SYSCALL_META_ROLLBACK) {
-		ti->syscall_saved_nr = 0;
-		instrumentation_end();
-		syscall_exit_to_user_mode(regs);
-		return;
-	}
-
-	if (meta & ALPHA_SYSCALL_META_SKIP) {
-		instrumentation_end();
-
-		syscall_exit_to_user_mode(regs);
-		return;
-	}
-
-	/*
-	 * Some successful syscalls, notably legacy ptrace PEEK requests,
-	 * return arbitrary data in r0.  That data may have the bit pattern
-	 * of a negative errno, so do not infer failure from ret < 0 when
-	 * arch code explicitly requested a successful Alpha return.
-	 */
-	if (meta & ALPHA_SYSCALL_META_FORCE_SUCCESS) {
-		regs->r0 = ret;
-		regs->r19 = 0;
-	} else if (ret < 0) {
-		regs->r0 = -ret;
-		regs->r19 = 1;
-	} else {
-		regs->r0 = ret;
-		regs->r19 = 0;
-	}
-
-	instrumentation_end();
-	syscall_exit_to_user_mode(regs);
-}
diff --git a/arch/alpha/kernel/syscall.c b/arch/alpha/kernel/syscall.c
new file mode 100644
index 0000000000000000000000000000000000000000..652406905a249af743109e369cace97d39f676c9
--- /dev/null
+++ b/arch/alpha/kernel/syscall.c
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Alpha syscall entry and result encoding. */
+#include <linux/entry-common.h>
+#include <linux/nospec.h>
+#include <linux/syscalls.h>
+
+#include <asm/syscall.h>
+
+#include "proto.h"
+
+typedef long (*syscall_fn_t)(unsigned long, unsigned long, unsigned long,
+			   unsigned long, unsigned long, unsigned long);
+
+static void alpha_set_syscall_result(struct pt_regs *regs, long ret)
+{
+	struct thread_info *ti = current_thread_info();
+	unsigned long meta = ti->syscall_meta;
+
+	ti->syscall_meta = 0;
+	if (meta & (ALPHA_SYSCALL_META_RESTORED | ALPHA_SYSCALL_META_ROLLBACK)) {
+		ti->syscall_saved_nr = 0;
+		ti->syscall_saved_r19 = 0;
+		return;
+	}
+
+	/* Entry work may have replaced argument 4 with the a3 error flag. */
+	if (!(meta & ALPHA_SYSCALL_META_SKIP))
+		ti->syscall_saved_r19 = regs->r19;
+
+	if (meta & ALPHA_SYSCALL_META_SKIP)
+		return;
+
+	/* A successful ptrace PEEK can return data that looks like an errno. */
+	if (meta & ALPHA_SYSCALL_META_FORCE_SUCCESS) {
+		regs->r0 = ret;
+		regs->r19 = 0;
+	} else if (ret < 0) {
+		regs->r0 = -ret;
+		regs->r19 = 1;
+	} else {
+		regs->r0 = ret;
+		regs->r19 = 0;
+	}
+}
+
+/* Called with interrupts disabled and a complete user switch_stack. */
+asmlinkage noinstr void alpha_syscall(struct pt_regs *regs)
+{
+	struct thread_info *ti = current_thread_info();
+	unsigned long saved_r19 = regs->r19;
+	long nr = regs->r0;
+	long ret = -ENOSYS;
+	bool permit;
+
+	regs->r1 = nr;
+	ti->syscall_meta = 0;
+	ti->syscall_saved_nr = nr;
+	ti->syscall_saved_r19 = saved_r19;
+
+	if (!(ti->status & TS_SAVED_FP)) {
+		ti->status |= TS_SAVED_FP;
+		__save_fpu();
+	}
+
+	permit = syscall_enter_from_user_mode_randomize_stack(regs, &nr);
+
+	instrumentation_begin();
+	if (unlikely(!permit || nr == -1)) {
+		/* r19 is still argument 4 unless a hook supplied a result. */
+		if (!(ti->syscall_meta & (ALPHA_SYSCALL_META_RESULT |
+					 ALPHA_SYSCALL_META_ROLLBACK)))
+			syscall_set_return_value(current, regs, -ENOSYS, 0);
+		ti->syscall_meta |= ALPHA_SYSCALL_META_SKIP;
+	} else if (likely((unsigned long)nr < NR_syscalls)) {
+		syscall_fn_t syscall_fn;
+
+		syscall_fn = sys_call_table[array_index_nospec(nr, NR_syscalls)];
+		ret = syscall_fn(regs->r16, regs->r17, regs->r18,
+				 regs->r19, regs->r20, regs->r21);
+	}
+	alpha_set_syscall_result(regs, ret);
+	instrumentation_end();
+
+	syscall_exit_to_user_mode(regs);
+}
diff --git a/arch/alpha/kernel/syscalls/syscall.tbl b/arch/alpha/kernel/syscalls/syscall.tbl
index 52e3538cc7df415f0b1613eb3db7de56d5bf20a2..f804988f90d6672e3bf409258a0fccc4ba214927 100644
--- a/arch/alpha/kernel/syscalls/syscall.tbl
+++ b/arch/alpha/kernel/syscalls/syscall.tbl
@@ -7,9 +7,9 @@
 #
 # The <abi> is always "common" for this file
 #
-0	common	osf_syscall			alpha_syscall_zero
+0	common	osf_syscall			sys_ni_syscall
 1	common	exit				sys_exit
-2	common	fork				alpha_fork
+2	common	fork				sys_fork
 3	common	read				sys_read
 4	common	write				sys_write
 5	common	osf_old_open			sys_ni_syscall
@@ -72,7 +72,7 @@
 63	common	getpgrp				sys_getpgrp
 64	common	getpagesize			sys_getpagesize
 65	common	osf_mremap			sys_ni_syscall
-66	common	vfork				alpha_vfork
+66	common	vfork				sys_vfork
 67	common	stat				sys_newstat
 68	common	lstat				sys_newlstat
 69	common	osf_sbrk			sys_ni_syscall
@@ -242,7 +242,7 @@
 309	common	get_kernel_syms			sys_ni_syscall
 310	common	syslog				sys_syslog
 311	common	reboot				sys_reboot
-312	common	clone				alpha_clone
+312	common	clone				sys_clone
 313	common	uselib				sys_uselib
 314	common	mlock				sys_mlock
 315	common	munlock				sys_munlock
@@ -474,7 +474,7 @@
 542	common	fsmount				sys_fsmount
 543	common	fspick				sys_fspick
 544	common	pidfd_open			sys_pidfd_open
-545	common	clone3				alpha_clone3
+545	common	clone3				sys_clone3
 546	common	close_range			sys_close_range
 547	common	openat2				sys_openat2
 548	common	pidfd_getfd			sys_pidfd_getfd
-- 
2.43.0


  parent reply	other threads:[~2026-11-03 21:43 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-03 21:35 [PATCH 00/14] alpha: fix entry bugs and consolidate generic helpers Magnus Lindholm
2026-11-03 21:35 ` [PATCH 01/14] alpha: fix saved registers in page-fault oops dumps Magnus Lindholm
2026-11-03 21:35 ` [PATCH 02/14] alpha: report syscall errors correctly to audit Magnus Lindholm
2026-11-03 21:35 ` [PATCH 03/14] alpha: preserve rolled-back registers for SIGSYS Magnus Lindholm
2026-11-03 21:35 ` [PATCH 04/14] alpha: fix syscall restart eligibility Magnus Lindholm
2026-11-03 21:35 ` [PATCH 05/14] alpha: distinguish skipped syscalls from invalid numbers Magnus Lindholm
2026-11-03 21:35 ` Magnus Lindholm [this message]
2026-11-03 21:35 ` [PATCH 07/14] alpha: use generic entry helpers for interrupts and exceptions Magnus Lindholm
2026-11-03 21:35 ` [PATCH 08/14] alpha: use generic syscall exit for new tasks Magnus Lindholm
2026-11-03 21:35 ` [PATCH 09/14] alpha: remove obsolete core dump register hooks Magnus Lindholm
2026-11-03 21:35 ` [PATCH 10/14] alpha: use generic syscall audit classification Magnus Lindholm
2026-11-03 21:35 ` [PATCH 11/14] alpha: use generic ptrace memory writes Magnus Lindholm
2026-11-03 21:35 ` [PATCH 12/14] alpha: use memparse for memory size options Magnus Lindholm
2026-11-03 21:35 ` [PATCH 13/14] alpha: use generic getrusage for OSF resource accounting Magnus Lindholm
2026-11-03 21:35 ` [PATCH 14/14] alpha: use generic CPU device registration Magnus Lindholm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261103214120.1099893-7-linmag7@gmail.com \
    --to=linmag7@gmail.com \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mattst88@gmail.com \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®