clarify the purpose of this project
[nyanglibc.git] / stdio-common / perror.s
blob74c358b8448bf441d48fda380372e5f73bd36b36
1 .text
2 .section .rodata.str1.1,"aMS",@progbits,1
3 .LC0:
4 .string ""
5 .LC1:
6 .string ": "
7 .LC2:
8 .string "%s%s%s\n"
9 .text
10 .p2align 4,,15
11 .type perror_internal, @function
12 perror_internal:
13 pushq %r12
14 pushq %rbp
15 movq %rdi, %r12
16 pushq %rbx
17 movl %edx, %edi
18 subq $1024, %rsp
19 testq %rsi, %rsi
20 je .L4
21 cmpb $0, (%rsi)
22 movq %rsi, %rbx
23 leaq .LC1(%rip), %rbp
24 je .L4
25 .L2:
26 movq %rsp, %rsi
27 movl $1024, %edx
28 call __strerror_r
29 leaq .LC2(%rip), %rsi
30 movq %rax, %r8
31 movq %rbp, %rcx
32 movq %rbx, %rdx
33 movq %r12, %rdi
34 xorl %eax, %eax
35 call __fxprintf
36 addq $1024, %rsp
37 popq %rbx
38 popq %rbp
39 popq %r12
40 ret
41 .p2align 4,,10
42 .p2align 3
43 .L4:
44 leaq .LC0(%rip), %rbp
45 movq %rbp, %rbx
46 jmp .L2
47 .size perror_internal, .-perror_internal
48 .section .rodata.str1.1
49 .LC3:
50 .string "w+"
51 .text
52 .p2align 4,,15
53 .globl perror
54 .hidden perror
55 .type perror, @function
56 perror:
57 pushq %r12
58 pushq %rbp
59 pushq %rbx
60 movq %rdi, %rbx
61 subq $16, %rsp
62 movq __libc_errno@gottpoff(%rip), %rax
63 movq stderr(%rip), %rdi
64 movl %fs:(%rax), %edx
65 movl 192(%rdi), %eax
66 testl %eax, %eax
67 je .L20
68 .L8:
69 addq $16, %rsp
70 movq %rbx, %rsi
71 popq %rbx
72 popq %rbp
73 popq %r12
74 jmp perror_internal
75 .p2align 4,,10
76 .p2align 3
77 .L20:
78 movl %edx, 12(%rsp)
79 call __fileno
80 cmpl $-1, %eax
81 movl 12(%rsp), %edx
82 jne .L9
83 .L19:
84 movq stderr(%rip), %rdi
85 jmp .L8
86 .p2align 4,,10
87 .p2align 3
88 .L9:
89 movl %eax, %edi
90 movl %edx, 12(%rsp)
91 call __dup
92 cmpl $-1, %eax
93 movl %eax, %ebp
94 movl 12(%rsp), %edx
95 je .L19
96 leaq .LC3(%rip), %rsi
97 movl %eax, %edi
98 movl %edx, 12(%rsp)
99 call _IO_new_fdopen@PLT
100 testq %rax, %rax
101 movq %rax, %r12
102 movl 12(%rsp), %edx
103 je .L21
104 movq %rbx, %rsi
105 movq %rax, %rdi
106 call perror_internal
107 testb $32, (%r12)
108 je .L13
109 movq stderr(%rip), %rax
110 orl $32, (%rax)
111 .L13:
112 addq $16, %rsp
113 movq %r12, %rdi
114 popq %rbx
115 popq %rbp
116 popq %r12
117 jmp _IO_new_fclose@PLT
118 .p2align 4,,10
119 .p2align 3
120 .L21:
121 movl %ebp, %edi
122 movl %edx, 12(%rsp)
123 call __close
124 movq stderr(%rip), %rdi
125 movl 12(%rsp), %edx
126 jmp .L8
127 .size perror, .-perror
128 .hidden __close
129 .hidden __dup
130 .hidden __fileno
131 .hidden __fxprintf
132 .hidden __strerror_r