| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /* Copyright (C) 1999, 2000 Free Software Foundation, Inc.   Copyright (C) 2001 Hewlett-Packard Australia This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Derived in part from the Linux-8086 C library, the GNU C Library, and several other sundry sources.  Files within this library are copyright by their respective copyright holders.*/#include <sysdep.h>#define _ERRNO_H	1#include <bits/errno.h>/* Clone the calling process, but without copying the whole address space.   The calling process is suspended until the new process exits or is   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,   and the process ID of the new process to the old process.  */.global errnoENTRY (__vfork)	mov.l	@r15+,r3		// pop value from the stack	mov.l	.L5,r1	mov.l	r3,@r1			// save it in .sav_stack	mov.w	.L3, r3#ifdef HIOS	trapa	#0x28#else	trapa	#0x10#endif	mov     r0, r1// 12 arithmetic shifts for the crappy sh2, because shad doesn't exist!		shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1	shar	r1//	mov	#-12, r2//	shad	r2, r1	not	r1, r1			// r1=0 means r0 = -1 to -4095	tst	r1, r1			// i.e. error in linux	bf	1f	mov.w	.L1, r1	cmp/eq	r1, r0	bt	2f	mov.l	.L2, r1	jmp	@r1	 mov	r0, r4	.align	41:	mov.l	.L5,r1	mov.l	@r1,r3			// get it from .sav_stack	mov.l	r3,@-r15		// restore value to the stack	rts	 nop	.align	42:.global __syscall_error__syscall_error:	/* Store it in errno... */	mov.l	.L4, r1	mov.l	r0, @r1	mov.l	.L5,r1	mov.l	@r1,r3			// get it from .sav_stack	mov.l	r3,@-r15		// restore value to the stack	/* And just kick back a -1.  */	rts	 mov	#-1, r0	.align	4.L1:	.word	-ENOSYS.L3:	.word	190			//__NR_vfork	.align	4			// Shouldn't be necessary as previously with have two words.L2:	.long	__syscall_error.L4:	.long	errno.L5:	.long	.sav_stack	.data	.align 4.sav_stack:					//area to temporary save the stach	.long	0.weak	vforkvfork = __vfork
 |