Revert "mips64: time64 for n32 ABI breaks a lot of tests, disable it for now"
[uclibc-ng.git] / libc / sysdeps / linux / mips / vfork.S
blobf504c2bb0d92cbe1325195cab0a663c0865a5f4c
1 /* Copyright (C) 2005 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
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.
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.
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    <http://www.gnu.org/licenses/>.  */
18 /* vfork() is just a special case of clone().  */
20 #include <sys/syscall.h>
21 #include <sys/asm.h>
22 #include <sysdep.h>
24 #ifdef __NR_fork
26 /* int vfork() */
28         .text
29         .hidden __vfork
30 LOCALSZ= 1
31 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
32 GPOFF= FRAMESZ-(1*SZREG)
33 NESTED(__vfork,FRAMESZ,sp)
34 #ifdef __PIC__
35         SETUP_GP
36 #endif
37         PTR_SUBU sp, FRAMESZ
38         SETUP_GP64 (a5, __vfork)
39 #ifdef __PIC__
40         SAVE_GP (GPOFF)
41 #endif
43         PTR_ADDU        sp, FRAMESZ
45         li              a0, 0x4112      /* CLONE_VM | CLONE_VFORK | SIGCHLD */
46         move            a1, sp
48         /* Do the system call */
49         li              v0,__NR_clone
50         syscall
52         bnez            a3,L(error)
54         /* Successful return from the parent or child.  */
55         RESTORE_GP64
56         j               ra
57         nop
59         /* Something bad happened -- no child created.  */
60 L(error):
61         move    a0, v0
62 #ifdef __PIC__
63         PTR_LA          t9, __syscall_error
64         RESTORE_GP64
65         jr              t9
66 #else
67         RESTORE_GP64
68         j               __syscall_error
69 #endif
70         END(__vfork)
72 weak_alias(__vfork,vfork)
73 libc_hidden_def(vfork)
75 #endif