summaryrefslogtreecommitdiffstats
path: root/usr/klibc/arch/sparc64/sysfork.S
blob: a0c1334092cda3ee5e3909d63824e23257e95caa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * arch/sparc64/sysfork.S
 *
 * The fork and vfork system calls are special on sparc[64]:
 * they return the "other process" pid in %o0 and the
 * "is child" flag in %o1
 *
 * Common system-call stub; %g1 already set to syscall number
 */

#include <machine/asm.h>

	.globl	__syscall_forkish
	.type	__syscall_forkish,#function
       	.align	4
__syscall_forkish:
	t	0x6d
	sub	%o1, 1, %o1
	bcc,a	%xcc, 1f
	  and	%o0, %o1, %o0
	PIC_PROLOGUE(%g1,%g4)
	SET(errno,%g1,%g4)
	st	%o0, [%g4]
	retl
	  mov	-1, %o0
1:
       	retl
	  nop