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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
/*
* June 27, 2001 Manuel Novoa III
*
* Modified to (hopefully) be PIC and REENTRANT safe.
*
*/
.text
.align 4
.globl vfork
.type vfork,@function
vfork:
popl %ecx
movl $190,%eax
#ifdef PIC
pushl %ebx
#endif
#APP
int $0x80
#NO_APP
#ifdef PIC
popl %ebx
#endif
cmpl $-4095,%eax
jae .Lerror
jmp *%ecx
.p2align 4,,7
.Lerror:
pushl %ecx
#ifdef PIC
pushl %ebx
call .Lhere
.Lhere:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.Lhere],%ebx
negl %eax
movl %eax,%ecx
#ifdef __UCLIBC_HAS_THREADS__
call __errno_location@PLT
#else
movl errno@GOT(%ebx),%eax
#endif /* __UCLIBC_HAS_THREADS__ */
movl %ecx,(%eax)
popl %ebx
#else
negl %eax
#ifdef __UCLIBC_HAS_THREADS__
movl %eax,%ecx
call __errno_location
movl %ecx,(%eax)
#else
movl %eax,errno
#endif /* __UCLIBC_HAS_THREADS__ */
#endif /* PIC */
movl $-1,%eax
ret
.Lsize:
.size vfork,.Lsize-vfork
|