Commit dfe09ae0 authored by Al Viro's avatar Al Viro
Browse files

alpha: switch to generic fork/vfork/clone


Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 87f1ca8f
...@@ -482,6 +482,9 @@ ...@@ -482,6 +482,9 @@
#define __ARCH_WANT_SYS_SIGPENDING #define __ARCH_WANT_SYS_SIGPENDING
#define __ARCH_WANT_SYS_RT_SIGSUSPEND #define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE #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 /* "Conditional" syscalls. What we want is
......
...@@ -612,44 +612,24 @@ ret_from_kernel_thread: ...@@ -612,44 +612,24 @@ 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 or in some way use the pt_regs struct.
*/ */
.macro fork_like name
.align 4 .align 4
.globl sys_fork .globl alpha_\name
.ent sys_fork .ent alpha_\name
sys_fork: alpha_\name:
.prologue 0 .prologue 0
bsr $1, do_switch_stack bsr $1, do_switch_stack
bis $31, SIGCHLD, $16 jsr $26, sys_\name
mov $31, $17
mov $31, $18
mov $31, $19
mov $31, $20
jsr $26, alpha_clone
fork_out:
ldq $26, 56($sp) ldq $26, 56($sp)
lda $sp, SWITCH_STACK_SIZE($sp) lda $sp, SWITCH_STACK_SIZE($sp)
ret 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 fork_like fork
.globl sys_vfork fork_like vfork
.ent sys_vfork fork_like clone
sys_vfork:
.prologue 0
bsr $1, do_switch_stack
lda $26, fork_out
jsr $31, alpha_vfork
.end sys_vfork
.align 4 .align 4
.globl sys_sigreturn .globl sys_sigreturn
......
...@@ -234,31 +234,6 @@ release_thread(struct task_struct *dead_task) ...@@ -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.. * Copy an alpha thread..
*/ */
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
sys_call_table: sys_call_table:
.quad alpha_ni_syscall /* 0 */ .quad alpha_ni_syscall /* 0 */
.quad sys_exit .quad sys_exit
.quad sys_fork .quad alpha_fork
.quad sys_read .quad sys_read
.quad sys_write .quad sys_write
.quad alpha_ni_syscall /* 5 */ .quad alpha_ni_syscall /* 5 */
...@@ -76,7 +76,7 @@ sys_call_table: ...@@ -76,7 +76,7 @@ sys_call_table:
.quad sys_getpgrp .quad sys_getpgrp
.quad sys_getpagesize .quad sys_getpagesize
.quad alpha_ni_syscall /* 65 */ .quad alpha_ni_syscall /* 65 */
.quad sys_vfork .quad alpha_vfork
.quad sys_newstat .quad sys_newstat
.quad sys_newlstat .quad sys_newlstat
.quad alpha_ni_syscall .quad alpha_ni_syscall
...@@ -330,7 +330,7 @@ sys_call_table: ...@@ -330,7 +330,7 @@ sys_call_table:
.quad sys_ni_syscall /* 309: old get_kernel_syms */ .quad sys_ni_syscall /* 309: old get_kernel_syms */
.quad sys_syslog /* 310 */ .quad sys_syslog /* 310 */
.quad sys_reboot .quad sys_reboot
.quad sys_clone .quad alpha_clone
.quad sys_uselib .quad sys_uselib
.quad sys_mlock .quad sys_mlock
.quad sys_munlock /* 315 */ .quad sys_munlock /* 315 */
......
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