Commit 060581c1 authored by Al Viro's avatar Al Viro Committed by Al Viro

alpha: use alpha_ni_syscall only for syscall zero

Once upon a time it used to have a C part that printed a warning
about unimplemented OSF syscalls.  That's what it's been doing
all over the OSF syscall range, while the native Linux syscall
range uses sys_ni_syscall().

With those warnings about unimplemented OSF syscalls gone (circa 2.4),
alpha_ni_syscall() has shrunk to that little bit of asm and the
only reason it hasn't been replaced with sys_ni_syscall() everywhere
is that extra twist needed in case of syscall #0.

Let's keep it only for syscall #0 and replace the rest with sys_ni_syscall.
And use sys_ni_syscall for "number out range" in ptraced-call case, as
we'd been doing for normal codepath since 2.1.86...
Acked-by: default avatarRichard Henderson <rth@twiddle.net>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5c60a738
...@@ -473,7 +473,7 @@ entSys: ...@@ -473,7 +473,7 @@ entSys:
bne $3, strace bne $3, strace
beq $4, 1f beq $4, 1f
ldq $27, 0($5) ldq $27, 0($5)
1: jsr $26, ($27), alpha_ni_syscall 1: jsr $26, ($27), sys_ni_syscall
ldgp $gp, 0($26) ldgp $gp, 0($26)
blt $0, $syscall_error /* the call failed */ blt $0, $syscall_error /* the call failed */
stq $0, 0($sp) stq $0, 0($sp)
...@@ -587,7 +587,7 @@ strace: ...@@ -587,7 +587,7 @@ strace:
/* get the system call pointer.. */ /* get the system call pointer.. */
lda $1, NR_SYSCALLS($31) lda $1, NR_SYSCALLS($31)
lda $2, sys_call_table lda $2, sys_call_table
lda $27, alpha_ni_syscall lda $27, sys_ni_syscall
cmpult $0, $1, $1 cmpult $0, $1, $1
s8addq $0, $2, $2 s8addq $0, $2, $2
beq $1, 1f beq $1, 1f
...@@ -843,15 +843,20 @@ sys_rt_sigreturn: ...@@ -843,15 +843,20 @@ sys_rt_sigreturn:
.end sys_rt_sigreturn .end sys_rt_sigreturn
.align 4 .align 4
.globl alpha_ni_syscall .globl alpha_syscall_zero
.ent alpha_ni_syscall .ent alpha_syscall_zero
alpha_ni_syscall: alpha_syscall_zero:
.prologue 0 .prologue 0
/* Special because it also implements overflow handling via /* Special because it needs to do something opposite to
syscall number 0. And if you recall, zero is a special force_successful_syscall_return(). We use the saved
trigger for "not an error". Store large non-zero there. */ 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 lda $0, -ENOSYS
unop unop
stq $0, 0($sp) stq $0, 0($sp)
ret ret
.end alpha_ni_syscall .end alpha_syscall_zero
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment