Commit 06999fd5 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'work.alpha' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull alpha syscall glue updates from Al Viro:
 "Two old patches making alpha syscall glue a bit less mysterious"

* 'work.alpha' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  alpha: unify the glue for sigreturn-like syscalls
  alpha: use alpha_ni_syscall only for syscall zero
parents ba7d4f36 8a68060c
...@@ -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
...@@ -791,7 +791,7 @@ ret_from_kernel_thread: ...@@ -791,7 +791,7 @@ ret_from_kernel_thread:
/* /*
* Special system calls. Most of these are special in that they either * Special system calls. Most of these are special in that they either
* have to play switch_stack games or in some way use the pt_regs struct. * have to play switch_stack games.
*/ */
.macro fork_like name .macro fork_like name
...@@ -812,46 +812,41 @@ fork_like fork ...@@ -812,46 +812,41 @@ fork_like fork
fork_like vfork fork_like vfork
fork_like clone fork_like clone
.macro sigreturn_like name
.align 4 .align 4
.globl sys_sigreturn .globl sys_\name
.ent sys_sigreturn .ent sys_\name
sys_sigreturn: sys_\name:
.prologue 0 .prologue 0
lda $9, ret_from_straced lda $9, ret_from_straced
cmpult $26, $9, $9 cmpult $26, $9, $9
lda $sp, -SWITCH_STACK_SIZE($sp) lda $sp, -SWITCH_STACK_SIZE($sp)
jsr $26, do_sigreturn jsr $26, do_\name
bne $9, 1f bne $9, 1f
jsr $26, syscall_trace_leave jsr $26, syscall_trace_leave
1: br $1, undo_switch_stack 1: br $1, undo_switch_stack
br ret_from_sys_call br ret_from_sys_call
.end sys_sigreturn .end sys_\name
.endm
.align 4 sigreturn_like sigreturn
.globl sys_rt_sigreturn sigreturn_like rt_sigreturn
.ent sys_rt_sigreturn
sys_rt_sigreturn:
.prologue 0
lda $9, ret_from_straced
cmpult $26, $9, $9
lda $sp, -SWITCH_STACK_SIZE($sp)
jsr $26, do_rt_sigreturn
bne $9, 1f
jsr $26, syscall_trace_leave
1: br $1, undo_switch_stack
br ret_from_sys_call
.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