clarify the purpose of this project
[nyanglibc.git] / posix / fork.s
bloba8a53c86f48d3642751ac7ff743d21b4472f6671
1 .text
2 .p2align 4,,15
3 .globl __libc_fork
4 .type __libc_fork, @function
5 __libc_fork:
6 pushq %r12
7 pushq %rbp
8 pushq %rbx
9 subq $176, %rsp
10 #APP
11 # 57 "../sysdeps/nptl/fork.c" 1
12 movl %fs:24,%ebx
13 # 0 "" 2
14 #NO_APP
15 xorl %ebp, %ebp
16 testl %ebx, %ebx
17 setne %bpl
18 xorl %edi, %edi
19 movl %ebp, %esi
20 call __run_fork_handlers
21 testl %ebx, %ebx
22 je .L3
23 cmpq $0, __nss_database_fork_prepare_parent@GOTPCREL(%rip)
24 je .L4
25 movq %rsp, %rdi
26 call __nss_database_fork_prepare_parent@PLT
27 .L4:
28 call _IO_list_lock
29 cmpq $0, __malloc_fork_lock_parent@GOTPCREL(%rip)
30 je .L3
31 call __malloc_fork_lock_parent@PLT
32 .L3:
33 movq %fs:16, %rax
34 xorl %r8d, %r8d
35 xorl %edx, %edx
36 xorl %esi, %esi
37 movl $18874385, %edi
38 leaq 720(%rax), %r10
39 movl $56, %eax
40 #APP
41 # 49 "../sysdeps/unix/sysv/linux/arch-fork.h" 1
42 syscall
44 # 0 "" 2
45 #NO_APP
46 cmpq $-4096, %rax
47 ja .L46
48 testl %eax, %eax
49 movl %eax, %r12d
50 jne .L7
51 movq __fork_generation_pointer(%rip), %rax
52 movq %fs:16, %rdi
53 testq %rax, %rax
54 je .L8
55 addq $4, (%rax)
56 .L8:
57 cmpq $0, __nptl_set_robust@GOTPCREL(%rip)
58 leaq 736(%rdi), %rax
59 movq %rax, 728(%rdi)
60 movq %rax, 736(%rdi)
61 je .L9
62 call __nptl_set_robust@PLT
63 .L9:
64 testl %ebx, %ebx
65 je .L11
66 cmpq $0, __malloc_fork_unlock_child@GOTPCREL(%rip)
67 je .L12
68 call __malloc_fork_unlock_child@PLT
69 .L12:
70 call _IO_iter_begin
71 movq %rax, %rbx
72 jmp .L13
73 .p2align 4,,10
74 .p2align 3
75 .L14:
76 movq %rbx, %rdi
77 call _IO_iter_next
78 movq %rax, %rbx
79 .L13:
80 call _IO_iter_end
81 cmpq %rax, %rbx
82 je .L47
83 movq %rbx, %rdi
84 call _IO_iter_file
85 movl (%rax), %eax
86 testb $-128, %ah
87 jne .L14
88 movq %rbx, %rdi
89 call _IO_iter_file
90 movq 136(%rax), %rax
91 movq $0, (%rax)
92 movq $0, 8(%rax)
93 jmp .L14
94 .p2align 4,,10
95 .p2align 3
96 .L47:
97 call _IO_list_resetlock
98 cmpq $0, __nss_database_fork_subprocess@GOTPCREL(%rip)
99 je .L11
100 movq %rsp, %rdi
101 call __nss_database_fork_subprocess@PLT
102 .L11:
103 pxor %xmm0, %xmm0
104 movl %ebp, %esi
105 movl $1, %edi
106 movq $0, 32+_dl_load_lock(%rip)
107 movups %xmm0, 16+_dl_load_lock(%rip)
108 movl $1, 16+_dl_load_lock(%rip)
109 movups %xmm0, _dl_load_lock(%rip)
110 call __run_fork_handlers
111 addq $176, %rsp
112 movl %r12d, %eax
113 popq %rbx
114 popq %rbp
115 popq %r12
117 .p2align 4,,10
118 .p2align 3
119 .L46:
120 movq __libc_errno@gottpoff(%rip), %rdx
121 negl %eax
122 movl $-1, %r12d
123 movl %eax, %fs:(%rdx)
124 .L7:
125 testl %ebx, %ebx
126 je .L18
127 cmpq $0, __malloc_fork_unlock_parent@GOTPCREL(%rip)
128 je .L19
129 call __malloc_fork_unlock_parent@PLT
130 .L19:
131 call _IO_list_unlock
132 .L18:
133 movl %ebp, %esi
134 movl $2, %edi
135 call __run_fork_handlers
136 addq $176, %rsp
137 movl %r12d, %eax
138 popq %rbx
139 popq %rbp
140 popq %r12
142 .size __libc_fork, .-__libc_fork
143 .weak fork
144 .set fork,__libc_fork
145 .weak __fork
146 .hidden __fork
147 .set __fork,__libc_fork
148 .weak __malloc_fork_unlock_parent
149 .weak __nss_database_fork_subprocess
150 .weak __malloc_fork_unlock_child
151 .weak __nptl_set_robust
152 .weak __malloc_fork_lock_parent
153 .weak __nss_database_fork_prepare_parent
154 .hidden _IO_list_unlock
155 .hidden __malloc_fork_unlock_parent
156 .hidden __nss_database_fork_subprocess
157 .hidden _IO_list_resetlock
158 .hidden _IO_iter_file
159 .hidden _IO_iter_end
160 .hidden _IO_iter_next
161 .hidden _IO_iter_begin
162 .hidden __malloc_fork_unlock_child
163 .hidden __fork_generation_pointer
164 .hidden __malloc_fork_lock_parent
165 .hidden _IO_list_lock
166 .hidden __nss_database_fork_prepare_parent
167 .hidden __run_fork_handlers