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