alpha: use alpha_ni_syscall only for syscall zero
authorAl Viro <viro@ZenIV.linux.org.uk>
Sat, 11 Aug 2018 00:04:55 +0000 (01:04 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 17 Aug 2018 01:02:17 +0000 (21:02 -0400)
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: Richard Henderson <rth@twiddle.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/alpha/kernel/entry.S
arch/alpha/kernel/systbls.S

index c64806a..21840e7 100644 (file)
@@ -473,7 +473,7 @@ entSys:
        bne     $3, strace
        beq     $4, 1f
        ldq     $27, 0($5)
-1:     jsr     $26, ($27), alpha_ni_syscall
+1:     jsr     $26, ($27), sys_ni_syscall
        ldgp    $gp, 0($26)
        blt     $0, $syscall_error      /* the call failed */
        stq     $0, 0($sp)
@@ -587,7 +587,7 @@ strace:
        /* get the system call pointer.. */
        lda     $1, NR_SYSCALLS($31)
        lda     $2, sys_call_table
-       lda     $27, alpha_ni_syscall
+       lda     $27, sys_ni_syscall
        cmpult  $0, $1, $1
        s8addq  $0, $2, $2
        beq     $1, 1f
@@ -843,15 +843,20 @@ sys_rt_sigreturn:
 .end sys_rt_sigreturn
 
        .align  4
-       .globl  alpha_ni_syscall
-       .ent    alpha_ni_syscall
-alpha_ni_syscall:
+       .globl  alpha_syscall_zero
+       .ent    alpha_syscall_zero
+alpha_syscall_zero:
        .prologue 0
-       /* Special because it also implements overflow handling via
-          syscall number 0.  And if you recall, zero is a special
-          trigger for "not an error".  Store large non-zero there.  */
+       /* 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_ni_syscall
+.end alpha_syscall_zero
index 1374e59..5b2e8ec 100644 (file)
        .align 3
        .globl sys_call_table
 sys_call_table:
-       .quad alpha_ni_syscall                  /* 0 */
+       .quad alpha_syscall_zero                /* 0 */
        .quad sys_exit
        .quad alpha_fork
        .quad sys_read
        .quad sys_write
-       .quad alpha_ni_syscall                  /* 5 */
+       .quad sys_ni_syscall                    /* 5 */
        .quad sys_close
        .quad sys_osf_wait4
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_link
        .quad sys_unlink                        /* 10 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_chdir
        .quad sys_fchdir
        .quad sys_mknod
        .quad sys_chmod                         /* 15 */
        .quad sys_chown
        .quad sys_osf_brk
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_lseek
        .quad sys_getxpid                       /* 20 */
        .quad sys_osf_mount
        .quad sys_umount
        .quad sys_setuid
        .quad sys_getxuid
-       .quad alpha_ni_syscall                  /* 25 */
+       .quad sys_ni_syscall                    /* 25 */
        .quad sys_ptrace
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 30 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 30 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_access
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 35 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 35 */
        .quad sys_sync
        .quad sys_kill
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_setpgid
-       .quad alpha_ni_syscall                  /* 40 */
+       .quad sys_ni_syscall                    /* 40 */
        .quad sys_dup
        .quad sys_alpha_pipe
        .quad sys_osf_set_program_attributes
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_open                          /* 45 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getxgid
        .quad sys_osf_sigprocmask
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 50 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 50 */
        .quad sys_acct
        .quad sys_sigpending
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_ioctl
-       .quad alpha_ni_syscall                  /* 55 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall                    /* 55 */
+       .quad sys_ni_syscall
        .quad sys_symlink
        .quad sys_readlink
        .quad sys_execve
        .quad sys_umask                         /* 60 */
        .quad sys_chroot
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getpgrp
        .quad sys_getpagesize
-       .quad alpha_ni_syscall                  /* 65 */
+       .quad sys_ni_syscall                    /* 65 */
        .quad alpha_vfork
        .quad sys_newstat
        .quad sys_newlstat
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 70 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 70 */
        .quad sys_osf_mmap
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_munmap
        .quad sys_mprotect
        .quad sys_madvise                       /* 75 */
        .quad sys_vhangup
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getgroups
        /* map BSD's setpgrp to sys_setpgid for binary compatibility: */
        .quad sys_setgroups                     /* 80 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_setpgid
        .quad sys_osf_setitimer
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 85 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 85 */
        .quad sys_osf_getitimer
        .quad sys_gethostname
        .quad sys_sethostname
@@ -119,19 +119,19 @@ sys_call_table:
        .quad sys_bind
        .quad sys_setsockopt                    /* 105 */
        .quad sys_listen
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 110 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 110 */
        .quad sys_sigsuspend
        .quad sys_osf_sigstack
        .quad sys_recvmsg
        .quad sys_sendmsg
-       .quad alpha_ni_syscall                  /* 115 */
+       .quad sys_ni_syscall                    /* 115 */
        .quad sys_osf_gettimeofday
        .quad sys_osf_getrusage
        .quad sys_getsockopt
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
 #ifdef CONFIG_OSF4_COMPAT
        .quad sys_osf_readv                     /* 120 */
        .quad sys_osf_writev
@@ -156,66 +156,66 @@ sys_call_table:
        .quad sys_mkdir
        .quad sys_rmdir
        .quad sys_osf_utimes
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 140 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 140 */
        .quad sys_getpeername
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getrlimit
        .quad sys_setrlimit                     /* 145 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_setsid
        .quad sys_quotactl
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getsockname                   /* 150 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 155 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 155 */
        .quad sys_osf_sigaction
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_osf_getdirentries
        .quad sys_osf_statfs                    /* 160 */
        .quad sys_osf_fstatfs
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_osf_getdomainname             /* 165 */
        .quad sys_setdomainname
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 170 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 175 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 180 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 185 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 190 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 195 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 170 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 175 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 180 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 185 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 190 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 195 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        /* The OSF swapon has two extra arguments, but we ignore them.  */
        .quad sys_swapon
        .quad sys_msgctl                        /* 200 */
@@ -231,93 +231,93 @@ sys_call_table:
        .quad sys_shmctl                        /* 210 */
        .quad sys_shmdt
        .quad sys_shmget
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 215 */
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 215 */
+       .quad sys_ni_syscall
        .quad sys_msync
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 220 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 220 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_osf_stat
        .quad sys_osf_lstat                     /* 225 */
        .quad sys_osf_fstat
        .quad sys_osf_statfs64
        .quad sys_osf_fstatfs64
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 230 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 230 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_getpgid
        .quad sys_getsid
        .quad sys_sigaltstack                   /* 235 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 240 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 240 */
        .quad sys_osf_sysinfo
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_osf_proplist_syscall
-       .quad alpha_ni_syscall                  /* 245 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 250 */
+       .quad sys_ni_syscall                    /* 245 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 250 */
        .quad sys_osf_usleep_thread
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_sysfs
-       .quad alpha_ni_syscall                  /* 255 */
+       .quad sys_ni_syscall                    /* 255 */
        .quad sys_osf_getsysinfo
        .quad sys_osf_setsysinfo
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 260 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 265 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 270 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 275 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 280 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 285 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 290 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 295 */
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 260 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 265 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 270 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 275 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 280 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 285 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 290 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 295 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
 /* linux-specific system calls start at 300 */
        .quad sys_bdflush                       /* 300 */
        .quad sys_sethae