clarify the purpose of this project
[nyanglibc.git] / stdlib / abort.s
blob5bf575adfc47d1ea23715407fa68fc9dae3d859b
1 .text
2 .p2align 4,,15
3 .globl abort
4 .hidden abort
5 .type abort, @function
6 abort:
7 pushq %rbx
8 subq $288, %rsp
9 movq %fs:16, %rbx
10 cmpq %rbx, 8+lock(%rip)
11 je .L2
12 #APP
13 # 54 "abort.c" 1
14 movl %fs:24,%eax
15 # 0 "" 2
16 #NO_APP
17 testl %eax, %eax
18 jne .L3
19 movl $1, %edx
20 #APP
21 # 47 "../sysdeps/unix/sysv/linux/x86/lowlevellock.h" 1
22 cmpxchgl %edx, lock(%rip)
23 # 0 "" 2
24 #NO_APP
25 .L4:
26 movq %rbx, 8+lock(%rip)
27 .L2:
28 movl stage(%rip), %eax
29 addl $1, 4+lock(%rip)
30 testl %eax, %eax
31 je .L22
32 .L5:
33 cmpl $1, %eax
34 je .L23
35 cmpl $2, %eax
36 je .L14
37 .L15:
38 cmpl $3, %eax
39 je .L24
40 .L16:
41 cmpl $4, %eax
42 je .L25
43 .L17:
44 cmpl $5, %eax
45 je .L26
46 .p2align 4,,10
47 .p2align 3
48 .L18:
49 #APP
50 # 121 "abort.c" 1
51 hlt
52 # 0 "" 2
53 #NO_APP
54 jmp .L18
55 .L3:
56 xorl %eax, %eax
57 movl $1, %edx
58 lock cmpxchgl %edx, lock(%rip)
59 je .L4
60 leaq lock(%rip), %rdi
61 call __lll_lock_wait_private
62 jmp .L4
63 .L26:
64 movl $127, %edi
65 movl $6, stage(%rip)
66 call _exit
67 .L25:
68 movl $5, stage(%rip)
69 #APP
70 # 107 "abort.c" 1
71 hlt
72 # 0 "" 2
73 #NO_APP
74 movl stage(%rip), %eax
75 jmp .L17
76 .L24:
77 movl $6, %edi
78 movl $4, stage(%rip)
79 call raise
80 movl stage(%rip), %eax
81 jmp .L16
82 .L23:
83 movl 4+lock(%rip), %eax
84 movl $0, stage(%rip)
85 subl $1, %eax
86 testl %eax, %eax
87 movl %eax, 4+lock(%rip)
88 jne .L8
89 movq $0, 8+lock(%rip)
90 #APP
91 # 77 "abort.c" 1
92 movl %fs:24,%edx
93 # 0 "" 2
94 #NO_APP
95 testl %edx, %edx
96 jne .L9
97 subl $1, lock(%rip)
98 .L8:
99 movl $6, %edi
100 call raise
101 movq %fs:16, %rbx
102 cmpq %rbx, 8+lock(%rip)
103 je .L11
104 #APP
105 # 81 "abort.c" 1
106 movl %fs:24,%eax
107 # 0 "" 2
108 #NO_APP
109 testl %eax, %eax
110 jne .L12
111 movl $1, %edx
112 #APP
113 # 47 "../sysdeps/unix/sysv/linux/x86/lowlevellock.h" 1
114 cmpxchgl %edx, lock(%rip)
115 # 0 "" 2
116 #NO_APP
117 .L13:
118 movq %rbx, 8+lock(%rip)
119 .L11:
120 addl $1, 4+lock(%rip)
121 .L14:
122 leaq 128(%rsp), %rsi
123 xorl %eax, %eax
124 movl $38, %ecx
125 xorl %edx, %edx
126 movl $3, stage(%rip)
127 movq %rsi, %rdi
128 rep stosl
129 movl $6, %edi
130 movq $-1, 136(%rsp)
131 call __sigaction
132 movl stage(%rip), %eax
133 jmp .L15
134 .L12:
135 xorl %eax, %eax
136 movl $1, %edx
137 lock cmpxchgl %edx, lock(%rip)
138 je .L13
139 leaq lock(%rip), %rdi
140 call __lll_lock_wait_private
141 jmp .L13
142 .L22:
143 movq %rsp, %rsi
144 xorl %edx, %edx
145 movl $1, %edi
146 movl $1, stage(%rip)
147 movq $32, (%rsp)
148 call __sigprocmask
149 movl stage(%rip), %eax
150 jmp .L5
151 .L9:
152 #APP
153 # 77 "abort.c" 1
154 xchgl %eax, lock(%rip)
155 # 0 "" 2
156 #NO_APP
157 subl $1, %eax
158 jle .L8
159 xorl %r10d, %r10d
160 movl $1, %edx
161 movl $129, %esi
162 leaq lock(%rip), %rdi
163 movl $202, %eax
164 #APP
165 # 77 "abort.c" 1
166 syscall
168 # 0 "" 2
169 #NO_APP
170 jmp .L8
171 .size abort, .-abort
172 .local lock
173 .comm lock,16,16
174 .local stage
175 .comm stage,4,4
176 .hidden __abort_msg
177 .globl __abort_msg
178 .bss
179 .align 8
180 .type __abort_msg, @object
181 .size __abort_msg, 8
182 __abort_msg:
183 .zero 8
184 .hidden __sigprocmask
185 .hidden __sigaction
186 .hidden raise
187 .hidden _exit
188 .hidden __lll_lock_wait_private