alpha: switch to generic fork/vfork/clone

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2012-10-26 09:54:47 -04:00
parent 87f1ca8fd9
commit dfe09ae0e5
4 changed files with 17 additions and 59 deletions

View file

@ -482,6 +482,9 @@
#define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE
/* "Conditional" syscalls. What we want is

View file

@ -612,44 +612,24 @@ ret_from_kernel_thread:
* 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.
*/
.macro fork_like name
.align 4
.globl sys_fork
.ent sys_fork
sys_fork:
.globl alpha_\name
.ent alpha_\name
alpha_\name:
.prologue 0
bsr $1, do_switch_stack
bis $31, SIGCHLD, $16
mov $31, $17
mov $31, $18
mov $31, $19
mov $31, $20
jsr $26, alpha_clone
fork_out:
jsr $26, sys_\name
ldq $26, 56($sp)
lda $sp, SWITCH_STACK_SIZE($sp)
ret
.end sys_fork
.end alpha_\name
.endm
.align 4
.globl sys_clone
.ent sys_clone
sys_clone:
.prologue 0
bsr $1, do_switch_stack
/* $16, $17, $18, $19, $20 come from the user. */
lda $26, fork_out
jsr $31, alpha_clone
.end sys_clone
.align 4
.globl sys_vfork
.ent sys_vfork
sys_vfork:
.prologue 0
bsr $1, do_switch_stack
lda $26, fork_out
jsr $31, alpha_vfork
.end sys_vfork
fork_like fork
fork_like vfork
fork_like clone
.align 4
.globl sys_sigreturn

View file

@ -234,31 +234,6 @@ release_thread(struct task_struct *dead_task)
{
}
/*
* "alpha_clone()".. By the time we get here, the
* non-volatile registers have also been saved on the
* stack. We do some ugly pointer stuff here.. (see
* also copy_thread)
*
* Notice that "fork()" is implemented in terms of clone,
* with parameters (SIGCHLD, 0).
*/
int
alpha_clone(unsigned long clone_flags, unsigned long usp,
int __user *parent_tid, int __user *child_tid,
unsigned long tls_value)
{
return do_fork(clone_flags, usp, current_pt_regs(), 0,
parent_tid, child_tid);
}
int
alpha_vfork(void)
{
return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
current_pt_regs(), 0, NULL, NULL);
}
/*
* Copy an alpha thread..
*/

View file

@ -12,7 +12,7 @@
sys_call_table:
.quad alpha_ni_syscall /* 0 */
.quad sys_exit
.quad sys_fork
.quad alpha_fork
.quad sys_read
.quad sys_write
.quad alpha_ni_syscall /* 5 */
@ -76,7 +76,7 @@ sys_call_table:
.quad sys_getpgrp
.quad sys_getpagesize
.quad alpha_ni_syscall /* 65 */
.quad sys_vfork
.quad alpha_vfork
.quad sys_newstat
.quad sys_newlstat
.quad alpha_ni_syscall
@ -330,7 +330,7 @@ sys_call_table:
.quad sys_ni_syscall /* 309: old get_kernel_syms */
.quad sys_syslog /* 310 */
.quad sys_reboot
.quad sys_clone
.quad alpha_clone
.quad sys_uselib
.quad sys_mlock
.quad sys_munlock /* 315 */