clarify the purpose of this project
[nyanglibc.git] / posix / spawni.s
blob39e90eb4cfd1949302de12fb567e94de4cc597d2
1 .text
2 .p2align 4,,15
3 .type __spawnix, @function
4 __spawnix:
5 .LFB69:
6 pushq %r15
7 pushq %r14
8 movq %rcx, %r14
9 pushq %r13
10 pushq %r12
11 movq %r8, %r13
12 pushq %rbp
13 pushq %rbx
14 movq %rdi, %r12
15 xorl %ebx, %ebx
16 subq $584, %rsp
17 movq %rsi, 8(%rsp)
18 movq %rdx, 16(%rsp)
19 movq %r9, 24(%rsp)
20 jmp .L2
21 .p2align 4,,10
22 .p2align 3
23 .L4:
24 cmpq $2147483646, %rbx
25 je .L26
26 .L2:
27 addq $1, %rbx
28 cmpq $0, -8(%r13,%rbx,8)
29 jne .L4
30 movq _dl_pagesize(%rip), %rax
31 xorl %r9d, %r9d
32 xorl %edi, %edi
33 movl $-1, %r8d
34 movl $131106, %ecx
35 leaq 33279(%rax,%rbx,8), %rbp
36 negq %rax
37 andq %rax, %rbp
38 movl _dl_stack_flags(%rip), %eax
39 movq %rbp, %rsi
40 leal 0(,%rax,4), %edx
41 andl $4, %edx
42 orl $3, %edx
43 call __mmap
44 cmpq $-1, %rax
45 movq %rax, %r15
46 je .L27
47 cmpq $0, __pthread_setcancelstate@GOTPCREL(%rip)
48 je .L6
49 leaq 44(%rsp), %rsi
50 movl $1, %edi
51 call __pthread_setcancelstate@PLT
52 .L6:
53 movq 8(%rsp), %rax
54 testq %r14, %r14
55 movl $0, 236(%rsp)
56 movq %rax, 176(%rsp)
57 movq 648(%rsp), %rax
58 movq %rax, 184(%rsp)
59 movq 16(%rsp), %rax
60 movq %rax, 192(%rsp)
61 je .L28
62 .L7:
63 movq 24(%rsp), %rax
64 movq %rbx, 216(%rsp)
65 leaq 48(%rsp), %rbx
66 movq %r14, 200(%rsp)
67 movq %r13, 208(%rsp)
68 movl $8, %r10d
69 movq %rbx, %rdx
70 leaq sigall_set(%rip), %rsi
71 xorl %edi, %edi
72 movq %rax, 224(%rsp)
73 movl 640(%rsp), %eax
74 movl %eax, 232(%rsp)
75 movl $14, %eax
76 #APP
77 # 71 "../sysdeps/unix/sysv/linux/internal-signals.h" 1
78 syscall
80 # 0 "" 2
81 #NO_APP
82 leaq __spawni_child(%rip), %rdi
83 leaq (%r15,%rbp), %rsi
84 xorl %eax, %eax
85 movq %rbx, %rcx
86 movl $16657, %edx
87 call __clone
88 testl %eax, %eax
89 movl %eax, %r14d
90 jle .L8
91 movl 236(%rsp), %r13d
92 testl %r13d, %r13d
93 jg .L29
94 movq %rbp, %rsi
95 movq %r15, %rdi
96 call __munmap
97 testl %r13d, %r13d
98 jne .L10
99 .L30:
100 testq %r12, %r12
101 je .L10
102 movl %r14d, (%r12)
103 .L10:
104 movl $8, %r10d
105 xorl %edx, %edx
106 movq %rbx, %rsi
107 movl $2, %edi
108 movl $14, %eax
109 #APP
110 # 105 "../sysdeps/unix/sysv/linux/internal-signals.h" 1
111 syscall
113 # 0 "" 2
114 #NO_APP
115 cmpq $0, __pthread_setcancelstate@GOTPCREL(%rip)
116 je .L1
117 movl 44(%rsp), %edi
118 xorl %esi, %esi
119 call __pthread_setcancelstate@PLT
120 .L1:
121 addq $584, %rsp
122 movl %r13d, %eax
123 popq %rbx
124 popq %rbp
125 popq %r12
126 popq %r13
127 popq %r14
128 popq %r15
130 .p2align 4,,10
131 .p2align 3
132 .L29:
133 xorl %esi, %esi
134 xorl %edx, %edx
135 movl %eax, %edi
136 call __waitpid
137 movq %rbp, %rsi
138 movq %r15, %rdi
139 call __munmap
140 jmp .L10
141 .p2align 4,,10
142 .p2align 3
143 .L8:
144 movl %eax, %r13d
145 movq %rbp, %rsi
146 movq %r15, %rdi
147 negl %r13d
148 call __munmap
149 testl %r13d, %r13d
150 je .L30
151 jmp .L10
152 .p2align 4,,10
153 .p2align 3
154 .L28:
155 leaq 240(%rsp), %rdi
156 movq %r14, %rax
157 movl $42, %ecx
158 leaq 240(%rsp), %r14
159 rep stosq
160 jmp .L7
161 .L26:
162 movq __libc_errno@gottpoff(%rip), %rax
163 movl $7, %r13d
164 movl $7, %fs:(%rax)
165 jmp .L1
166 .L27:
167 movq __libc_errno@gottpoff(%rip), %rax
168 movl %fs:(%rax), %r13d
169 jmp .L1
170 .LFE69:
171 .size __spawnix, .-__spawnix
172 .p2align 4,,15
173 .type __spawni_child, @function
174 __spawni_child:
175 .LFB68:
176 pushq %r15
177 pushq %r14
178 xorl %eax, %eax
179 pushq %r13
180 pushq %r12
181 movq %rdi, %r15
182 pushq %rbp
183 pushq %rbx
184 movl $19, %ecx
185 xorl %esi, %esi
186 movl $1, %ebx
187 movl $1, %r13d
188 subq $328, %rsp
189 movq 152(%rdi), %rbp
190 movq 144(%rdi), %r14
191 leaq 160(%rsp), %r12
192 leaq 32(%rsp), %rdx
193 movq %r12, %rdi
194 rep stosq
195 xorl %edi, %edi
196 call __sigprocmask
197 movzwl 0(%rbp), %edx
198 jmp .L37
199 .p2align 4,,10
200 .p2align 3
201 .L119:
202 testq %rax, 8(%rbp)
203 je .L32
204 .L36:
205 movq $0, 160(%rsp)
206 .L33:
207 xorl %edx, %edx
208 movq %r12, %rsi
209 movl %ebx, %edi
210 call __libc_sigaction
211 .L114:
212 movzwl 0(%rbp), %edx
213 .L34:
214 addl $1, %ebx
215 cmpl $65, %ebx
216 je .L118
217 .L37:
218 leal -1(%rbx), %ecx
219 movq %r13, %rax
220 salq %cl, %rax
221 testb $4, %dl
222 jne .L119
223 .L32:
224 testq %rax, 32(%rsp)
225 je .L34
226 leal -32(%rbx), %eax
227 cmpl $1, %eax
228 jbe .L120
229 xorl %esi, %esi
230 movq %r12, %rdx
231 movl %ebx, %edi
232 call __libc_sigaction
233 cmpq $1, 160(%rsp)
234 jne .L36
235 jmp .L114
236 .p2align 4,,10
237 .p2align 3
238 .L118:
239 movl %edx, %eax
240 andl $48, %eax
241 cmpw $16, %ax
242 je .L121
243 testb $32, %dl
244 jne .L122
245 .L43:
246 testb $-128, %dl
247 jne .L123
248 .L41:
249 testb $2, %dl
250 jne .L124
251 .L45:
252 andb $1, %dl
253 jne .L125
254 .L47:
255 testq %r14, %r14
256 je .L49
257 cmpl $0, 4(%r14)
258 jle .L49
259 leaq 16(%rsp), %rax
260 leaq .L55(%rip), %rbx
261 xorl %r13d, %r13d
262 movb $0, 3(%rsp)
263 movq %rax, 8(%rsp)
264 .p2align 4,,10
265 .p2align 3
266 .L63:
267 movq %r13, %rcx
268 salq $5, %rcx
269 addq 8(%r14), %rcx
270 cmpl $4, (%rcx)
271 movq %rcx, %r12
272 ja .L53
273 movl (%rcx), %eax
274 movslq (%rbx,%rax,4), %rax
275 addq %rbx, %rax
276 jmp *%rax
277 .section .rodata
278 .align 4
279 .align 4
280 .L55:
281 .long .L54-.L55
282 .long .L56-.L55
283 .long .L57-.L55
284 .long .L58-.L55
285 .long .L59-.L55
286 .text
287 .p2align 4,,10
288 .p2align 3
289 .L58:
290 movq 8(%rcx), %rdi
291 call __chdir
292 testl %eax, %eax
293 jne .L116
294 .p2align 4,,10
295 .p2align 3
296 .L53:
297 leal 1(%r13), %eax
298 addq $1, %r13
299 cmpl %eax, 4(%r14)
300 jg .L63
301 .L49:
302 testb $8, 0(%rbp)
303 movq %r15, %rsi
304 jne .L126
305 .L65:
306 xorl %edx, %edx
307 movl $2, %edi
308 call __sigprocmask
309 movq 176(%r15), %rdx
310 movq 160(%r15), %rsi
311 movq 128(%r15), %rdi
312 call *136(%r15)
313 .L116:
314 movq __libc_errno@gottpoff(%rip), %rdx
315 .L42:
316 movl %fs:(%rdx), %eax
317 movl $10, %edx
318 movl $127, %edi
319 testl %eax, %eax
320 cmove %edx, %eax
321 movl %eax, 188(%r15)
322 call _exit
323 .p2align 4,,10
324 .p2align 3
325 .L57:
326 movl 8(%rcx), %edi
327 call __close_nocancel
328 movl 28(%r12), %edx
329 movl 24(%r12), %esi
330 xorl %eax, %eax
331 movq 16(%r12), %rdi
332 call __open_nocancel
333 cmpl $-1, %eax
334 je .L116
335 movl 8(%r12), %esi
336 cmpl %eax, %esi
337 je .L53
338 movl %eax, %edi
339 movl %eax, 4(%rsp)
340 call __dup2
341 cmpl %eax, 8(%r12)
342 movl 4(%rsp), %edx
343 jne .L116
344 movl %edx, %edi
345 call __close_nocancel
346 testl %eax, %eax
347 je .L53
348 jmp .L116
349 .p2align 4,,10
350 .p2align 3
351 .L54:
352 movl 8(%rcx), %edi
353 call __close_nocancel
354 testl %eax, %eax
355 je .L53
356 cmpb $0, 3(%rsp)
357 je .L127
358 .L60:
359 movslq 8(%r12), %rax
360 testl %eax, %eax
361 js .L116
362 cmpq 16(%rsp), %rax
363 jnb .L116
364 movb $1, 3(%rsp)
365 jmp .L53
366 .p2align 4,,10
367 .p2align 3
368 .L59:
369 movl 8(%rcx), %edi
370 call __fchdir
371 testl %eax, %eax
372 je .L53
373 jmp .L116
374 .p2align 4,,10
375 .p2align 3
376 .L56:
377 movl 8(%rcx), %r9d
378 movl 12(%rcx), %esi
379 cmpl %esi, %r9d
380 je .L128
381 movl %r9d, %edi
382 call __dup2
383 cmpl %eax, 12(%r12)
384 je .L53
385 jmp .L116
386 .L125:
387 call __getuid
388 orl $-1, %edx
389 movl %eax, %esi
390 movl $117, %eax
391 movl %edx, %edi
392 #APP
393 # 189 "../sysdeps/unix/sysv/linux/spawni.c" 1
394 syscall
396 # 0 "" 2
397 #NO_APP
398 cmpq $-4096, %rax
399 ja .L117
400 testq %rax, %rax
401 jne .L116
402 call __getgid
403 orl $-1, %edx
404 movl %eax, %esi
405 movl $119, %eax
406 movl %edx, %edi
407 #APP
408 # 190 "../sysdeps/unix/sysv/linux/spawni.c" 1
409 syscall
411 # 0 "" 2
412 #NO_APP
413 cmpq $-4096, %rax
414 ja .L117
415 testq %rax, %rax
416 je .L47
417 jmp .L116
418 .L128:
419 xorl %edx, %edx
420 movl %r9d, %edi
421 xorl %eax, %eax
422 movl $1, %esi
423 movl %r9d, 4(%rsp)
424 call __fcntl
425 cmpl $-1, %eax
426 movl 4(%rsp), %r9d
427 je .L116
428 andl $-2, %eax
429 movl $2, %esi
430 movl %r9d, %edi
431 movl %eax, %edx
432 xorl %eax, %eax
433 call __fcntl
434 addl $1, %eax
435 jne .L53
436 jmp .L116
437 .L123:
438 call __setsid
439 testl %eax, %eax
440 js .L116
441 movzwl 0(%rbp), %edx
442 jmp .L41
443 .L122:
444 movl 268(%rbp), %esi
445 leaq 264(%rbp), %rdx
446 xorl %edi, %edi
447 call __sched_setscheduler
448 addl $1, %eax
449 je .L116
450 .L115:
451 movzwl 0(%rbp), %edx
452 jmp .L43
453 .L124:
454 movl 4(%rbp), %esi
455 xorl %edi, %edi
456 call __setpgid
457 testl %eax, %eax
458 jne .L116
459 movzwl 0(%rbp), %edx
460 jmp .L45
461 .L127:
462 movq 8(%rsp), %rsi
463 movl $7, %edi
464 call __getrlimit64
465 jmp .L60
466 .L121:
467 leaq 264(%rbp), %rsi
468 xorl %edi, %edi
469 call __sched_setparam
470 addl $1, %eax
471 jne .L115
472 jmp .L116
473 .L126:
474 leaq 136(%rbp), %rsi
475 jmp .L65
476 .L117:
477 movq __libc_errno@gottpoff(%rip), %rdx
478 negl %eax
479 movl %eax, %fs:(%rdx)
480 jmp .L42
481 .L120:
482 movq %r13, 160(%rsp)
483 jmp .L33
484 .LFE68:
485 .size __spawni_child, .-__spawni_child
486 .p2align 4,,15
487 .globl __spawni
488 .hidden __spawni
489 .type __spawni, @function
490 __spawni:
491 .LFB70:
492 subq $8, %rsp
493 leaq __execve(%rip), %r11
494 leaq __execvpex(%rip), %rax
495 movl 16(%rsp), %r10d
496 testb $1, %r10b
497 cmove %r11, %rax
498 pushq %rax
499 pushq %r10
500 call __spawnix
501 addq $24, %rsp
503 .LFE70:
504 .size __spawni, .-__spawni
505 .section .rodata
506 .align 32
507 .type sigall_set, @object
508 .size sigall_set, 128
509 sigall_set:
510 .quad -1
511 .quad -1
512 .quad -1
513 .quad -1
514 .quad -1
515 .quad -1
516 .quad -1
517 .quad -1
518 .quad -1
519 .quad -1
520 .quad -1
521 .quad -1
522 .quad -1
523 .quad -1
524 .quad -1
525 .quad -1
526 .weak __pthread_setcancelstate
527 .hidden __execvpex
528 .hidden __execve
529 .hidden __sched_setparam
530 .hidden __getrlimit64
531 .hidden __setpgid
532 .hidden __sched_setscheduler
533 .hidden __setsid
534 .hidden __fcntl
535 .hidden __getgid
536 .hidden __getuid
537 .hidden __fchdir
538 .hidden __dup2
539 .hidden __open_nocancel
540 .hidden __close_nocancel
541 .hidden _exit
542 .hidden __chdir
543 .hidden __libc_sigaction
544 .hidden __sigprocmask
545 .hidden __waitpid
546 .hidden __munmap
547 .hidden __clone
548 .hidden __mmap