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
...@@ -11,93 +11,93 @@ ...@@ -11,93 +11,93 @@
.align 3 .align 3
.globl sys_call_table .globl sys_call_table
sys_call_table: sys_call_table:
.quad alpha_ni_syscall /* 0 */ .quad alpha_syscall_zero /* 0 */
.quad sys_exit .quad sys_exit
.quad alpha_fork .quad alpha_fork
.quad sys_read .quad sys_read
.quad sys_write .quad sys_write
.quad alpha_ni_syscall /* 5 */ .quad sys_ni_syscall /* 5 */
.quad sys_close .quad sys_close
.quad sys_osf_wait4 .quad sys_osf_wait4
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_link .quad sys_link
.quad sys_unlink /* 10 */ .quad sys_unlink /* 10 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_chdir .quad sys_chdir
.quad sys_fchdir .quad sys_fchdir
.quad sys_mknod .quad sys_mknod
.quad sys_chmod /* 15 */ .quad sys_chmod /* 15 */
.quad sys_chown .quad sys_chown
.quad sys_osf_brk .quad sys_osf_brk
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_lseek .quad sys_lseek
.quad sys_getxpid /* 20 */ .quad sys_getxpid /* 20 */
.quad sys_osf_mount .quad sys_osf_mount
.quad sys_umount .quad sys_umount
.quad sys_setuid .quad sys_setuid
.quad sys_getxuid .quad sys_getxuid
.quad alpha_ni_syscall /* 25 */ .quad sys_ni_syscall /* 25 */
.quad sys_ptrace .quad sys_ptrace
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 30 */ .quad sys_ni_syscall /* 30 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_access .quad sys_access
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 35 */ .quad sys_ni_syscall /* 35 */
.quad sys_sync .quad sys_sync
.quad sys_kill .quad sys_kill
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_setpgid .quad sys_setpgid
.quad alpha_ni_syscall /* 40 */ .quad sys_ni_syscall /* 40 */
.quad sys_dup .quad sys_dup
.quad sys_alpha_pipe .quad sys_alpha_pipe
.quad sys_osf_set_program_attributes .quad sys_osf_set_program_attributes
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_open /* 45 */ .quad sys_open /* 45 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getxgid .quad sys_getxgid
.quad sys_osf_sigprocmask .quad sys_osf_sigprocmask
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 50 */ .quad sys_ni_syscall /* 50 */
.quad sys_acct .quad sys_acct
.quad sys_sigpending .quad sys_sigpending
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_ioctl .quad sys_ioctl
.quad alpha_ni_syscall /* 55 */ .quad sys_ni_syscall /* 55 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_symlink .quad sys_symlink
.quad sys_readlink .quad sys_readlink
.quad sys_execve .quad sys_execve
.quad sys_umask /* 60 */ .quad sys_umask /* 60 */
.quad sys_chroot .quad sys_chroot
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getpgrp .quad sys_getpgrp
.quad sys_getpagesize .quad sys_getpagesize
.quad alpha_ni_syscall /* 65 */ .quad sys_ni_syscall /* 65 */
.quad alpha_vfork .quad alpha_vfork
.quad sys_newstat .quad sys_newstat
.quad sys_newlstat .quad sys_newlstat
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 70 */ .quad sys_ni_syscall /* 70 */
.quad sys_osf_mmap .quad sys_osf_mmap
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_munmap .quad sys_munmap
.quad sys_mprotect .quad sys_mprotect
.quad sys_madvise /* 75 */ .quad sys_madvise /* 75 */
.quad sys_vhangup .quad sys_vhangup
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getgroups .quad sys_getgroups
/* map BSD's setpgrp to sys_setpgid for binary compatibility: */ /* map BSD's setpgrp to sys_setpgid for binary compatibility: */
.quad sys_setgroups /* 80 */ .quad sys_setgroups /* 80 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_setpgid .quad sys_setpgid
.quad sys_osf_setitimer .quad sys_osf_setitimer
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 85 */ .quad sys_ni_syscall /* 85 */
.quad sys_osf_getitimer .quad sys_osf_getitimer
.quad sys_gethostname .quad sys_gethostname
.quad sys_sethostname .quad sys_sethostname
...@@ -119,19 +119,19 @@ sys_call_table: ...@@ -119,19 +119,19 @@ sys_call_table:
.quad sys_bind .quad sys_bind
.quad sys_setsockopt /* 105 */ .quad sys_setsockopt /* 105 */
.quad sys_listen .quad sys_listen
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 110 */ .quad sys_ni_syscall /* 110 */
.quad sys_sigsuspend .quad sys_sigsuspend
.quad sys_osf_sigstack .quad sys_osf_sigstack
.quad sys_recvmsg .quad sys_recvmsg
.quad sys_sendmsg .quad sys_sendmsg
.quad alpha_ni_syscall /* 115 */ .quad sys_ni_syscall /* 115 */
.quad sys_osf_gettimeofday .quad sys_osf_gettimeofday
.quad sys_osf_getrusage .quad sys_osf_getrusage
.quad sys_getsockopt .quad sys_getsockopt
.quad alpha_ni_syscall .quad sys_ni_syscall
#ifdef CONFIG_OSF4_COMPAT #ifdef CONFIG_OSF4_COMPAT
.quad sys_osf_readv /* 120 */ .quad sys_osf_readv /* 120 */
.quad sys_osf_writev .quad sys_osf_writev
...@@ -156,66 +156,66 @@ sys_call_table: ...@@ -156,66 +156,66 @@ sys_call_table:
.quad sys_mkdir .quad sys_mkdir
.quad sys_rmdir .quad sys_rmdir
.quad sys_osf_utimes .quad sys_osf_utimes
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 140 */ .quad sys_ni_syscall /* 140 */
.quad sys_getpeername .quad sys_getpeername
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getrlimit .quad sys_getrlimit
.quad sys_setrlimit /* 145 */ .quad sys_setrlimit /* 145 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_setsid .quad sys_setsid
.quad sys_quotactl .quad sys_quotactl
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getsockname /* 150 */ .quad sys_getsockname /* 150 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 155 */ .quad sys_ni_syscall /* 155 */
.quad sys_osf_sigaction .quad sys_osf_sigaction
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_osf_getdirentries .quad sys_osf_getdirentries
.quad sys_osf_statfs /* 160 */ .quad sys_osf_statfs /* 160 */
.quad sys_osf_fstatfs .quad sys_osf_fstatfs
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_osf_getdomainname /* 165 */ .quad sys_osf_getdomainname /* 165 */
.quad sys_setdomainname .quad sys_setdomainname
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 170 */ .quad sys_ni_syscall /* 170 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 175 */ .quad sys_ni_syscall /* 175 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 180 */ .quad sys_ni_syscall /* 180 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 185 */ .quad sys_ni_syscall /* 185 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 190 */ .quad sys_ni_syscall /* 190 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 195 */ .quad sys_ni_syscall /* 195 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
/* The OSF swapon has two extra arguments, but we ignore them. */ /* The OSF swapon has two extra arguments, but we ignore them. */
.quad sys_swapon .quad sys_swapon
.quad sys_msgctl /* 200 */ .quad sys_msgctl /* 200 */
...@@ -231,93 +231,93 @@ sys_call_table: ...@@ -231,93 +231,93 @@ sys_call_table:
.quad sys_shmctl /* 210 */ .quad sys_shmctl /* 210 */
.quad sys_shmdt .quad sys_shmdt
.quad sys_shmget .quad sys_shmget
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 215 */ .quad sys_ni_syscall /* 215 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_msync .quad sys_msync
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 220 */ .quad sys_ni_syscall /* 220 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_osf_stat .quad sys_osf_stat
.quad sys_osf_lstat /* 225 */ .quad sys_osf_lstat /* 225 */
.quad sys_osf_fstat .quad sys_osf_fstat
.quad sys_osf_statfs64 .quad sys_osf_statfs64
.quad sys_osf_fstatfs64 .quad sys_osf_fstatfs64
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 230 */ .quad sys_ni_syscall /* 230 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_getpgid .quad sys_getpgid
.quad sys_getsid .quad sys_getsid
.quad sys_sigaltstack /* 235 */ .quad sys_sigaltstack /* 235 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 240 */ .quad sys_ni_syscall /* 240 */
.quad sys_osf_sysinfo .quad sys_osf_sysinfo
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_osf_proplist_syscall .quad sys_osf_proplist_syscall
.quad alpha_ni_syscall /* 245 */ .quad sys_ni_syscall /* 245 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 250 */ .quad sys_ni_syscall /* 250 */
.quad sys_osf_usleep_thread .quad sys_osf_usleep_thread
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad sys_sysfs .quad sys_sysfs
.quad alpha_ni_syscall /* 255 */ .quad sys_ni_syscall /* 255 */
.quad sys_osf_getsysinfo .quad sys_osf_getsysinfo
.quad sys_osf_setsysinfo .quad sys_osf_setsysinfo
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 260 */ .quad sys_ni_syscall /* 260 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 265 */ .quad sys_ni_syscall /* 265 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 270 */ .quad sys_ni_syscall /* 270 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 275 */ .quad sys_ni_syscall /* 275 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 280 */ .quad sys_ni_syscall /* 280 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 285 */ .quad sys_ni_syscall /* 285 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 290 */ .quad sys_ni_syscall /* 290 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall /* 295 */ .quad sys_ni_syscall /* 295 */
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
.quad alpha_ni_syscall .quad sys_ni_syscall
/* linux-specific system calls start at 300 */ /* linux-specific system calls start at 300 */
.quad sys_bdflush /* 300 */ .quad sys_bdflush /* 300 */
.quad sys_sethae .quad sys_sethae
......
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