1 |
/* ----------------------------------------------------------------------- |
/* ----------------------------------------------------------------------- |
2 |
sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003 Red Hat, Inc. |
sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. |
3 |
|
|
4 |
X86 Foreign Function Interface |
X86 Foreign Function Interface |
5 |
|
|
130 |
.ffi_call_SYSV_end: |
.ffi_call_SYSV_end: |
131 |
.size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV |
.size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV |
132 |
|
|
133 |
|
.align 4 |
134 |
|
FFI_HIDDEN (ffi_closure_SYSV) |
135 |
|
.globl ffi_closure_SYSV |
136 |
|
.type ffi_closure_SYSV, @function |
137 |
|
|
138 |
|
ffi_closure_SYSV: |
139 |
|
.LFB2: |
140 |
|
pushl %ebp |
141 |
|
.LCFI2: |
142 |
|
movl %esp, %ebp |
143 |
|
.LCFI3: |
144 |
|
subl $40, %esp |
145 |
|
leal -24(%ebp), %edx |
146 |
|
movl %edx, -12(%ebp) /* resp */ |
147 |
|
leal 8(%ebp), %edx |
148 |
|
movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ |
149 |
|
leal -12(%ebp), %edx |
150 |
|
movl %edx, (%esp) /* &resp */ |
151 |
|
#if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__ |
152 |
|
call ffi_closure_SYSV_inner |
153 |
|
#else |
154 |
|
movl %ebx, 8(%esp) |
155 |
|
.LCFI7: |
156 |
|
call 1f |
157 |
|
1: popl %ebx |
158 |
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx |
159 |
|
call ffi_closure_SYSV_inner@PLT |
160 |
|
movl 8(%esp), %ebx |
161 |
|
#endif |
162 |
|
movl -12(%ebp), %ecx |
163 |
|
cmpl $FFI_TYPE_INT, %eax |
164 |
|
je .Lcls_retint |
165 |
|
cmpl $FFI_TYPE_FLOAT, %eax |
166 |
|
je .Lcls_retfloat |
167 |
|
cmpl $FFI_TYPE_DOUBLE, %eax |
168 |
|
je .Lcls_retdouble |
169 |
|
cmpl $FFI_TYPE_LONGDOUBLE, %eax |
170 |
|
je .Lcls_retldouble |
171 |
|
cmpl $FFI_TYPE_SINT64, %eax |
172 |
|
je .Lcls_retllong |
173 |
|
.Lcls_epilogue: |
174 |
|
movl %ebp, %esp |
175 |
|
popl %ebp |
176 |
|
ret |
177 |
|
.Lcls_retint: |
178 |
|
movl (%ecx), %eax |
179 |
|
jmp .Lcls_epilogue |
180 |
|
.Lcls_retfloat: |
181 |
|
flds (%ecx) |
182 |
|
jmp .Lcls_epilogue |
183 |
|
.Lcls_retdouble: |
184 |
|
fldl (%ecx) |
185 |
|
jmp .Lcls_epilogue |
186 |
|
.Lcls_retldouble: |
187 |
|
fldt (%ecx) |
188 |
|
jmp .Lcls_epilogue |
189 |
|
.Lcls_retllong: |
190 |
|
movl (%ecx), %eax |
191 |
|
movl 4(%ecx), %edx |
192 |
|
jmp .Lcls_epilogue |
193 |
|
.LFE2: |
194 |
|
.size ffi_closure_SYSV, .-ffi_closure_SYSV |
195 |
|
|
196 |
|
#if !FFI_NO_RAW_API |
197 |
|
|
198 |
|
#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) |
199 |
|
#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) |
200 |
|
#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) |
201 |
|
#define CIF_FLAGS_OFFSET 20 |
202 |
|
|
203 |
|
.align 4 |
204 |
|
FFI_HIDDEN (ffi_closure_raw_SYSV) |
205 |
|
.globl ffi_closure_raw_SYSV |
206 |
|
.type ffi_closure_raw_SYSV, @function |
207 |
|
|
208 |
|
ffi_closure_raw_SYSV: |
209 |
|
.LFB3: |
210 |
|
pushl %ebp |
211 |
|
.LCFI4: |
212 |
|
movl %esp, %ebp |
213 |
|
.LCFI5: |
214 |
|
pushl %esi |
215 |
|
.LCFI6: |
216 |
|
subl $36, %esp |
217 |
|
movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ |
218 |
|
movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ |
219 |
|
movl %edx, 12(%esp) /* user_data */ |
220 |
|
leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ |
221 |
|
movl %edx, 8(%esp) /* raw_args */ |
222 |
|
leal -24(%ebp), %edx |
223 |
|
movl %edx, 4(%esp) /* &res */ |
224 |
|
movl %esi, (%esp) /* cif */ |
225 |
|
call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ |
226 |
|
movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ |
227 |
|
cmpl $FFI_TYPE_INT, %eax |
228 |
|
je .Lrcls_retint |
229 |
|
cmpl $FFI_TYPE_FLOAT, %eax |
230 |
|
je .Lrcls_retfloat |
231 |
|
cmpl $FFI_TYPE_DOUBLE, %eax |
232 |
|
je .Lrcls_retdouble |
233 |
|
cmpl $FFI_TYPE_LONGDOUBLE, %eax |
234 |
|
je .Lrcls_retldouble |
235 |
|
cmpl $FFI_TYPE_SINT64, %eax |
236 |
|
je .Lrcls_retllong |
237 |
|
.Lrcls_epilogue: |
238 |
|
addl $36, %esp |
239 |
|
popl %esi |
240 |
|
popl %ebp |
241 |
|
ret |
242 |
|
.Lrcls_retint: |
243 |
|
movl -24(%ebp), %eax |
244 |
|
jmp .Lrcls_epilogue |
245 |
|
.Lrcls_retfloat: |
246 |
|
flds -24(%ebp) |
247 |
|
jmp .Lrcls_epilogue |
248 |
|
.Lrcls_retdouble: |
249 |
|
fldl -24(%ebp) |
250 |
|
jmp .Lrcls_epilogue |
251 |
|
.Lrcls_retldouble: |
252 |
|
fldt -24(%ebp) |
253 |
|
jmp .Lrcls_epilogue |
254 |
|
.Lrcls_retllong: |
255 |
|
movl -24(%ebp), %eax |
256 |
|
movl -20(%ebp), %edx |
257 |
|
jmp .Lrcls_epilogue |
258 |
|
.LFE3: |
259 |
|
.size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV |
260 |
|
#endif |
261 |
|
|
262 |
.section .eh_frame,EH_FRAME_FLAGS,@progbits |
.section .eh_frame,EH_FRAME_FLAGS,@progbits |
263 |
.Lframe1: |
.Lframe1: |
264 |
.long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ |
.long .LECIE1-.LSCIE1 /* Length of Common Information Entry */ |
309 |
.byte 0x5 /* .uleb128 0x5 */ |
.byte 0x5 /* .uleb128 0x5 */ |
310 |
.align 4 |
.align 4 |
311 |
.LEFDE1: |
.LEFDE1: |
312 |
|
.LSFDE2: |
313 |
|
.long .LEFDE2-.LASFDE2 /* FDE Length */ |
314 |
|
.LASFDE2: |
315 |
|
.long .LASFDE2-.Lframe1 /* FDE CIE offset */ |
316 |
|
#ifdef __PIC__ |
317 |
|
.long .LFB2-. /* FDE initial location */ |
318 |
|
#else |
319 |
|
.long .LFB2 |
320 |
|
#endif |
321 |
|
.long .LFE2-.LFB2 /* FDE address range */ |
322 |
|
#ifdef __PIC__ |
323 |
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */ |
324 |
|
#endif |
325 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
326 |
|
.long .LCFI2-.LFB2 |
327 |
|
.byte 0xe /* DW_CFA_def_cfa_offset */ |
328 |
|
.byte 0x8 /* .uleb128 0x8 */ |
329 |
|
.byte 0x85 /* DW_CFA_offset, column 0x5 */ |
330 |
|
.byte 0x2 /* .uleb128 0x2 */ |
331 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
332 |
|
.long .LCFI3-.LCFI2 |
333 |
|
.byte 0xd /* DW_CFA_def_cfa_register */ |
334 |
|
.byte 0x5 /* .uleb128 0x5 */ |
335 |
|
#if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__ |
336 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
337 |
|
.long .LCFI7-.LCFI3 |
338 |
|
.byte 0x83 /* DW_CFA_offset, column 0x3 */ |
339 |
|
.byte 0xa /* .uleb128 0xa */ |
340 |
|
#endif |
341 |
|
.align 4 |
342 |
|
.LEFDE2: |
343 |
|
|
344 |
|
#if !FFI_NO_RAW_API |
345 |
|
|
346 |
|
.LSFDE3: |
347 |
|
.long .LEFDE3-.LASFDE3 /* FDE Length */ |
348 |
|
.LASFDE3: |
349 |
|
.long .LASFDE3-.Lframe1 /* FDE CIE offset */ |
350 |
|
#ifdef __PIC__ |
351 |
|
.long .LFB3-. /* FDE initial location */ |
352 |
|
#else |
353 |
|
.long .LFB3 |
354 |
|
#endif |
355 |
|
.long .LFE3-.LFB3 /* FDE address range */ |
356 |
|
#ifdef __PIC__ |
357 |
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */ |
358 |
|
#endif |
359 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
360 |
|
.long .LCFI4-.LFB3 |
361 |
|
.byte 0xe /* DW_CFA_def_cfa_offset */ |
362 |
|
.byte 0x8 /* .uleb128 0x8 */ |
363 |
|
.byte 0x85 /* DW_CFA_offset, column 0x5 */ |
364 |
|
.byte 0x2 /* .uleb128 0x2 */ |
365 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
366 |
|
.long .LCFI5-.LCFI4 |
367 |
|
.byte 0xd /* DW_CFA_def_cfa_register */ |
368 |
|
.byte 0x5 /* .uleb128 0x5 */ |
369 |
|
.byte 0x4 /* DW_CFA_advance_loc4 */ |
370 |
|
.long .LCFI6-.LCFI5 |
371 |
|
.byte 0x86 /* DW_CFA_offset, column 0x6 */ |
372 |
|
.byte 0x3 /* .uleb128 0x3 */ |
373 |
|
.align 4 |
374 |
|
.LEFDE3: |
375 |
|
|
376 |
|
#endif |
377 |
|
|
378 |
#endif /* ifndef __x86_64__ */ |
#endif /* ifndef __x86_64__ */ |