2481de9a120c52a3f2fc573a2cb851eb87ba821e
[kopensolaris-gnu/glibc.git] / linuxthreads / sysdeps / unix / sysv / linux / alpha / vfork.S
1 /* Copyright (C) 2003 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19
20 #include <sysdep-cancel.h>
21
22         .globl __vfork
23         .align 4
24         .ent __vfork,0
25 __LABEL(__vfork)
26         ldgp    gp, 0(pv)
27         .prologue 1
28         PSEUDO_PROF
29         SINGLE_THREAD_P(t0)
30 #ifdef SHARED
31         bne     t0, HIDDEN_JUMPTARGET (__fork) !samegp
32 #else
33         bne     t0, $hidden_fork
34 #endif
35         lda     v0, SYS_ify(vfork)
36         call_pal PAL_callsys
37 #ifdef SHARED
38         bne     a3, __syscall_error !samegp
39 #else
40         bne     a3, $syscall_error
41 #endif
42         ret
43 #ifndef SHARED
44 $hidden_fork:
45         jmp     zero, HIDDEN_JUMPTARGET (__fork)
46 $syscall_error:
47         jmp     zero, __syscall_error
48 #endif
49 PSEUDO_END(__vfork)
50 libc_hidden_def (__vfork)
51
52 weak_alias (__vfork, vfork)