1 | /* Copyright (C) 2000-2022 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, see |
16 | <https://www.gnu.org/licenses/>. */ |
17 | |
18 | |
19 | #include <sysdep.h> |
20 | #define _SIGNAL_H |
21 | #include <bits/signum-arch.h> |
22 | #include <tcb-offsets.h> |
23 | |
24 | /* The following are defined in linux/sched.h, which unfortunately */ |
25 | /* is not safe for inclusion in an assembly file. */ |
26 | #define CLONE_VM 0x00000100 /* set if VM shared between processes */ |
27 | #define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ |
28 | |
29 | /* pid_t vfork(void); */ |
30 | /* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ |
31 | |
32 | ENTRY (__libc_vfork) |
33 | .prologue // work around a GAS bug which triggers if |
34 | .body // first .prologue is not at the beginning of proc. |
35 | alloc r2=ar.pfs,0,0,2,0 |
36 | mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD |
37 | mov out1=0 /* Standard sp value. */ |
38 | ;; |
39 | DO_CALL (SYS_ify (clone)) |
40 | cmp.eq p6,p0=0,r8 |
41 | (p6) br.cond.dptk 1f |
42 | 1: |
43 | cmp.eq p6,p0=-1,r10 |
44 | (p6) br.cond.spnt.few __syscall_error |
45 | ret |
46 | PSEUDO_END (__libc_vfork) |
47 | |
48 | strong_alias (__libc_vfork, __vfork) |
49 | libc_hidden_def (__vfork) |
50 | weak_alias (__vfork, vfork) |
51 | |