win32.S: Add handling for position-independent code on Darwin
Newer versions of Darwin generate the necessary stub functions automatically and just need a call instruction, but accomodating older versions as well requires adding the stub.
This commit is contained in:
@@ -691,6 +691,8 @@ USCORE_SYMBOL(ffi_closure_SYSV):
|
|||||||
movl %edx, (%esp) /* &resp */
|
movl %edx, (%esp) /* &resp */
|
||||||
#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
|
#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
|
||||||
call USCORE_SYMBOL(ffi_closure_SYSV_inner)
|
call USCORE_SYMBOL(ffi_closure_SYSV_inner)
|
||||||
|
#elif defined(X86_DARWIN)
|
||||||
|
calll L_ffi_closure_SYSV_inner$stub
|
||||||
#else
|
#else
|
||||||
movl %ebx, 8(%esp)
|
movl %ebx, 8(%esp)
|
||||||
call 1f
|
call 1f
|
||||||
@@ -970,6 +972,8 @@ USCORE_SYMBOL(ffi_closure_STDCALL):
|
|||||||
movl %edx, (%esp) /* &resp */
|
movl %edx, (%esp) /* &resp */
|
||||||
#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
|
#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__)
|
||||||
call USCORE_SYMBOL(ffi_closure_SYSV_inner)
|
call USCORE_SYMBOL(ffi_closure_SYSV_inner)
|
||||||
|
#elif defined(X86_DARWIN)
|
||||||
|
calll L_ffi_closure_SYSV_inner$stub
|
||||||
#else
|
#else
|
||||||
movl %ebx, 8(%esp)
|
movl %ebx, 8(%esp)
|
||||||
call 1f
|
call 1f
|
||||||
@@ -1070,6 +1074,13 @@ USCORE_SYMBOL(ffi_closure_STDCALL):
|
|||||||
.ffi_closure_STDCALL_end:
|
.ffi_closure_STDCALL_end:
|
||||||
.LFE5:
|
.LFE5:
|
||||||
|
|
||||||
|
#if defined(X86_DARWIN)
|
||||||
|
.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
|
||||||
|
L_ffi_closure_SYSV_inner$stub:
|
||||||
|
.indirect_symbol _ffi_closure_SYSV_inner
|
||||||
|
hlt ; hlt ; hlt ; hlt ; hlt
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(X86_WIN32) && !defined(__OS2__)
|
#if defined(X86_WIN32) && !defined(__OS2__)
|
||||||
.section .eh_frame,"w"
|
.section .eh_frame,"w"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user