alpha: switch to generic fork/vfork/clone
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
87f1ca8fd9
commit
dfe09ae0e5
4 changed files with 17 additions and 59 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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..
|
||||
*/
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue