123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
- * libc/sysdeps/linux/nios/vfork.S -- `vfork' syscall for linux/nios
- *
- * Copyright (C) 2004 Microtronix Datacom Ltd
- *
- * This file is subject to the terms and conditions of the GNU Lesser
- * General Public License. See the file COPYING.LIB in the main
- * directory of this archive for more details.
- *
- * Written by Wentao Xu <wentao@microtronix.com>
- */
- #include <features.h>
- #include <bits/errno.h>
- #include <sys/syscall.h>
- #include "NM_Macros.S"
- #ifndef __NR_vfork
- #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
- #endif
- .text
- .align 2
- .globl __vfork
- .hidden __vfork
- .type __vfork,@function
- __vfork:
- MOVIP %g1, __NR_vfork
- trap 63
-
- bgen %g1, 12
- not %g1 /* (unsigned long) -4096 */
- cmp %o0, %g1
- skps cc_hi
- jmp %o7
- nop
-
- fix_errno:
- neg %o0
- save %sp, -16
- MOVIA %g1, __errno_location@h
- call %g1
- nop
- st [%o0], %i0 /* store errno */
-
- xor %i0, %i0
- subi %i0, 1 /* retval=-1 */
- ret
- restore
- .size __vfork,.-__vfork
- weak_alias(__vfork,vfork)
- libc_hidden_def(vfork)
|