clarify the purpose of this project
[nyanglibc.git] / io / getcwd.shared.s
blob50172067c0bf7905ff8d3cf5e6015509e6671e16
1 .text
2 #APP
3 memmove = __GI_memmove
4 memset = __GI_memset
5 memcpy = __GI_memcpy
6 .section .rodata.str1.1,"aMS",@progbits,1
7 .LC0:
8 .string "."
9 .LC1:
10 .string "/"
11 .LC2:
12 .string ".."
13 .section .rodata.str1.8,"aMS",@progbits,1
14 .align 8
15 .LC3:
16 .string "../sysdeps/unix/sysv/linux/getcwd.c"
17 .align 8
18 .LC4:
19 .string "errno != ERANGE || buf != NULL || size != 0"
20 #NO_APP
21 .text
22 .p2align 4,,15
23 .globl __GI___getcwd
24 .hidden __GI___getcwd
25 .type __GI___getcwd, @function
26 __GI___getcwd:
27 pushq %r15
28 pushq %r14
29 pushq %r13
30 pushq %r12
31 pushq %rbp
32 pushq %rbx
33 movq %rdi, %rbx
34 subq $264, %rsp
35 testq %rsi, %rsi
36 movq %rsi, 24(%rsp)
37 jne .L2
38 testq %rdi, %rdi
39 jne .L100
40 call __GI___getpagesize
41 movl $4096, %esi
42 cmpl $4096, %eax
43 cmovge %eax, %esi
44 movslq %esi, %rsi
45 .L5:
46 movq %rsi, %rdi
47 movq %rsi, 8(%rsp)
48 call malloc@PLT
49 testq %rax, %rax
50 movq %rax, %r15
51 movq 8(%rsp), %rsi
52 jne .L6
53 .p2align 4,,10
54 .p2align 3
55 .L101:
56 xorl %r15d, %r15d
57 .L1:
58 addq $264, %rsp
59 movq %r15, %rax
60 popq %rbx
61 popq %rbp
62 popq %r12
63 popq %r13
64 popq %r14
65 popq %r15
66 ret
67 .p2align 4,,10
68 .p2align 3
69 .L2:
70 testq %rdi, %rdi
71 movq 24(%rsp), %rsi
72 je .L5
73 movq %rdi, %r15
74 .L6:
75 movq %r15, %rdi
76 movl $79, %eax
77 #APP
78 # 81 "../sysdeps/unix/sysv/linux/getcwd.c" 1
79 syscall
81 # 0 "" 2
82 #NO_APP
83 cmpq $-4096, %rax
84 ja .L103
85 cmpl $0, %eax
86 jle .L9
87 testq %rbx, %rbx
88 sete 70(%rsp)
89 cmpq $0, 24(%rsp)
90 movzbl 70(%rsp), %ecx
91 sete %dl
92 andl %ecx, %edx
93 cmpb $47, (%r15)
94 je .L104
95 testb %dl, %dl
96 jne .L105
97 .L15:
98 cmpq $0, 24(%rsp)
99 jne .L54
100 .L100:
101 movq __libc_errno@gottpoff(%rip), %rax
102 xorl %r15d, %r15d
103 movl $22, %fs:(%rax)
104 jmp .L1
105 .p2align 4,,10
106 .p2align 3
107 .L105:
108 movq %r15, %rdi
109 call free@PLT
110 movl $4096, %edi
111 call malloc@PLT
112 testq %rax, %rax
113 movq %rax, %r15
114 movq $0, 40(%rsp)
115 je .L16
116 movq $4096, 48(%rsp)
117 .L17:
118 movq 48(%rsp), %rax
119 leaq 112(%rsp), %rsi
120 leaq .LC0(%rip), %rdi
121 movq %rsi, 8(%rsp)
122 leaq (%r15,%rax), %rbx
123 leaq -1(%rbx), %rax
124 movb $0, -1(%rbx)
125 movq %rax, 72(%rsp)
126 call __GI___lstat64
127 testl %eax, %eax
128 js .L99
129 movq 112(%rsp), %rax
130 movq 8(%rsp), %rsi
131 leaq .LC1(%rip), %rdi
132 movq %rax, 16(%rsp)
133 movq 120(%rsp), %rax
134 movq %rax, %r14
135 call __GI___lstat64
136 testl %eax, %eax
137 js .L99
138 movq 112(%rsp), %rax
139 cmpq %rax, 16(%rsp)
140 movq %r14, %rcx
141 movq 120(%rsp), %rdi
142 movq %rax, 80(%rsp)
143 setne %dl
144 cmpq %rdi, %r14
145 movq %rdi, 88(%rsp)
146 setne %al
147 orb %al, %dl
148 movb %dl, 71(%rsp)
149 je .L21
150 movq __libc_errno@gottpoff(%rip), %r12
151 movq %r15, 56(%rsp)
152 xorl %ebp, %ebp
153 movl $-100, %r14d
154 movq %rcx, %r15
155 .L82:
156 leaq .LC2(%rip), %rsi
157 xorl %edx, %edx
158 movl %r14d, %edi
159 xorl %eax, %eax
160 call __GI___openat64
161 testl %eax, %eax
162 movl %eax, %r14d
163 js .L22
164 movq 8(%rsp), %rsi
165 movl %eax, %edi
166 call __GI___fstat64
167 testl %eax, %eax
168 jne .L23
169 testq %rbp, %rbp
170 je .L27
171 movq %rbp, %rdi
172 call __closedir
173 testl %eax, %eax
174 jne .L95
175 .L27:
176 movq 112(%rsp), %rax
177 movl %r14d, %edi
178 movq %rax, 32(%rsp)
179 movq 120(%rsp), %rax
180 movq %rax, 96(%rsp)
181 call __fdopendir
182 testq %rax, %rax
183 movq %rax, %rbp
184 je .L95
185 movzbl 71(%rsp), %r13d
186 .p2align 4,,10
187 .p2align 3
188 .L26:
189 movq %rbp, %rdi
190 movl $0, %fs:(%r12)
191 call __GI___readdir64
192 testq %rax, %rax
193 je .L106
194 cmpb $46, 19(%rax)
195 je .L51
196 .L32:
197 testb %r13b, %r13b
198 je .L34
199 cmpq %r15, (%rax)
200 movq 16(%rsp), %rsi
201 sete %dl
202 cmpq %rsi, 32(%rsp)
203 setne %cl
204 orb %cl, %dl
205 je .L26
206 movl %edx, %r13d
207 .L34:
208 leaq 19(%rax), %rbx
209 movq 8(%rsp), %rdx
210 movl $256, %ecx
211 movl %r14d, %edi
212 movq %rbx, %rsi
213 call __GI___fstatat64
214 testl %eax, %eax
215 jne .L26
216 movl 136(%rsp), %eax
217 andl $61440, %eax
218 cmpl $16384, %eax
219 jne .L26
220 movq 16(%rsp), %rax
221 cmpq %rax, 112(%rsp)
222 jne .L26
223 cmpq %r15, 120(%rsp)
224 jne .L26
225 movq 72(%rsp), %r13
226 subq 56(%rsp), %r13
227 movq %rbx, %rdi
228 call __GI_strlen
229 movq %rax, %rcx
230 cmpq %rax, %r13
231 ja .L35
232 cmpq $0, 24(%rsp)
233 jne .L107
234 movq 48(%rsp), %rax
235 movq %rcx, 104(%rsp)
236 cmpq %rax, %rcx
237 movq %rax, %r15
238 cmovnb %rcx, %r15
239 addq %rax, %r15
240 jc .L39
241 movq 56(%rsp), %rdi
242 movq %r15, %rsi
243 call realloc@PLT
244 testq %rax, %rax
245 movq %rax, %r8
246 je .L39
247 movq 48(%rsp), %rax
248 movq %r13, %rdi
249 leaq (%r8,%r13), %rsi
250 movq %r8, 16(%rsp)
251 subq %rax, %rdi
252 subq %r13, %rax
253 addq %r15, %rdi
254 movq %rax, %rdx
255 addq %r8, %rdi
256 call __GI_memcpy@PLT
257 movq 16(%rsp), %r8
258 movq 104(%rsp), %rcx
259 movq %rax, 72(%rsp)
260 movq %r15, 48(%rsp)
261 movq %r8, 56(%rsp)
262 .L35:
263 movq 72(%rsp), %r8
264 movq %rbx, %rsi
265 movq %rcx, %rdx
266 subq %rcx, %r8
267 movq %r8, %rdi
268 call __GI_memcpy@PLT
269 movq %rax, %r8
270 leaq -1(%rax), %rax
271 movq 96(%rsp), %rbx
272 movb $47, -1(%r8)
273 movq %rax, 72(%rsp)
274 movq 32(%rsp), %rax
275 cmpq %rax, 80(%rsp)
276 movq %rbx, %r15
277 movq %rax, 16(%rsp)
278 jne .L82
279 cmpq %rbx, 88(%rsp)
280 jne .L82
281 movq %rbp, %rdi
282 movq 56(%rsp), %r15
283 call __closedir
284 testl %eax, %eax
285 jne .L41
286 movq 48(%rsp), %rax
287 leaq (%r15,%rax), %rbx
288 .L21:
289 movq 48(%rsp), %rax
290 leaq -1(%r15,%rax), %rax
291 cmpq 72(%rsp), %rax
292 je .L108
293 .L42:
294 movq 72(%rsp), %rsi
295 movq %r15, %rdi
296 subq %rsi, %rbx
297 movq %rbx, %rdx
298 call __GI_memmove
299 cmpq $0, 24(%rsp)
300 jne .L43
301 cmpq 48(%rsp), %rbx
302 jnb .L1
303 movq %rbx, %rsi
304 movq %r15, %rdi
305 call realloc@PLT
306 movq %rax, 40(%rsp)
307 .L43:
308 movq 40(%rsp), %rax
309 testq %rax, %rax
310 cmovne %rax, %r15
311 jmp .L1
312 .p2align 4,,10
313 .p2align 3
314 .L106:
315 movl %fs:(%r12), %ebx
316 testl %ebx, %ebx
317 jne .L97
318 testb %r13b, %r13b
319 je .L97
320 movq %rbp, %rdi
321 call __GI___rewinddir
322 movq %rbp, %rdi
323 call __GI___readdir64
324 testq %rax, %rax
325 je .L109
326 xorl %r13d, %r13d
327 cmpb $46, 19(%rax)
328 jne .L34
329 .L51:
330 cmpb $0, 20(%rax)
331 je .L26
332 cmpw $46, 20(%rax)
333 jne .L32
334 jmp .L26
335 .p2align 4,,10
336 .p2align 3
337 .L97:
338 movq 56(%rsp), %r15
339 .L29:
340 testl %ebx, %ebx
341 jne .L31
342 movl $2, %fs:(%r12)
343 movl $2, %ebx
344 .L31:
345 movq %rbp, %rdi
346 call __closedir
347 .L19:
348 cmpq $0, 40(%rsp)
349 je .L110
350 .L46:
351 movl %ebx, %fs:(%r12)
352 .L16:
353 cmpq $0, 24(%rsp)
354 je .L101
355 cmpb $0, 70(%rsp)
356 je .L101
357 movq 40(%rsp), %rdi
358 call free@PLT
359 jmp .L101
360 .p2align 4,,10
361 .p2align 3
362 .L9:
363 je .L13
364 movq __libc_errno@gottpoff(%rip), %r12
365 movl %fs:(%r12), %eax
366 .L8:
367 cmpl $36, %eax
368 je .L13
369 cmpl $34, %eax
370 je .L111
371 .L48:
372 testq %rbx, %rbx
373 jne .L101
374 movq %r15, %rdi
375 xorl %r15d, %r15d
376 call free@PLT
377 jmp .L1
378 .p2align 4,,10
379 .p2align 3
380 .L104:
381 testb %dl, %dl
382 jne .L112
383 .L11:
384 testq %rbx, %rbx
385 cmovne %rbx, %r15
386 jmp .L1
387 .p2align 4,,10
388 .p2align 3
389 .L54:
390 movq 24(%rsp), %rax
391 movq %r15, 40(%rsp)
392 movq %rax, 48(%rsp)
393 jmp .L17
394 .p2align 4,,10
395 .p2align 3
396 .L13:
397 testq %rbx, %rbx
398 sete 70(%rsp)
399 cmpq $0, 24(%rsp)
400 movzbl 70(%rsp), %eax
401 sete %dl
402 andl %eax, %edx
403 testb %dl, %dl
404 je .L15
405 jmp .L105
406 .p2align 4,,10
407 .p2align 3
408 .L103:
409 movq __libc_errno@gottpoff(%rip), %r12
410 negl %eax
411 movl %eax, %fs:(%r12)
412 jmp .L8
413 .p2align 4,,10
414 .p2align 3
415 .L110:
416 movq %r15, %rdi
417 call free@PLT
418 jmp .L46
419 .p2align 4,,10
420 .p2align 3
421 .L99:
422 movq __libc_errno@gottpoff(%rip), %r12
423 movl %fs:(%r12), %ebx
424 jmp .L19
425 .p2align 4,,10
426 .p2align 3
427 .L112:
428 movslq %eax, %rsi
429 call realloc@PLT
430 movq %rax, %rbx
431 jmp .L11
432 .p2align 4,,10
433 .p2align 3
434 .L111:
435 testq %rbx, %rbx
436 jne .L48
437 cmpq $0, 24(%rsp)
438 jne .L48
439 leaq __PRETTY_FUNCTION__.9117(%rip), %rcx
440 leaq .LC3(%rip), %rsi
441 leaq .LC4(%rip), %rdi
442 movl $124, %edx
443 call __GI___assert_fail
444 .p2align 4,,10
445 .p2align 3
446 .L109:
447 movq 56(%rsp), %r15
448 movl %fs:(%r12), %ebx
449 jmp .L29
450 .L95:
451 movq 56(%rsp), %r15
452 movl %fs:(%r12), %ebx
453 .L45:
454 movl %r14d, %edi
455 call __GI___close_nocancel
456 jmp .L19
457 .L22:
458 testq %rbp, %rbp
459 movq 56(%rsp), %r15
460 movl %fs:(%r12), %ebx
461 je .L19
462 jmp .L31
463 .p2align 4,,10
464 .p2align 3
465 .L23:
466 testq %rbp, %rbp
467 movq 56(%rsp), %r15
468 movl %fs:(%r12), %ebx
469 je .L45
470 movq %rbp, %rdi
471 call __closedir
472 jmp .L45
473 .p2align 4,,10
474 .p2align 3
475 .L108:
476 subq $1, 72(%rsp)
477 movb $47, -1(%rax)
478 jmp .L42
479 .L41:
480 movl %fs:(%r12), %ebx
481 jmp .L19
482 .L39:
483 movq 56(%rsp), %r15
484 movl $12, %fs:(%r12)
485 movl $12, %ebx
486 jmp .L31
487 .L107:
488 movq 56(%rsp), %r15
489 movl $34, %fs:(%r12)
490 movl $34, %ebx
491 jmp .L31
492 .size __GI___getcwd, .-__GI___getcwd
493 .globl __getcwd
494 .set __getcwd,__GI___getcwd
495 .weak getcwd
496 .set getcwd,__getcwd
497 .section .rodata.str1.8
498 .align 8
499 .type __PRETTY_FUNCTION__.9117, @object
500 .size __PRETTY_FUNCTION__.9117, 9
501 __PRETTY_FUNCTION__.9117:
502 .string "__getcwd"
503 .hidden __fdopendir
504 .hidden __closedir