Commit 8353cd27 by Dave Korn Committed by Dave Korn

configure.ac: Also check if assembler supports pc-relative relocs on X86_WIN32 targets.

	* configure.ac:  Also check if assembler supports pc-relative
	relocs on X86_WIN32 targets.
	* configure:  Regenerate.
	* src/x86/win32.S (ffi_prep_args):  Declare extern, not global.
	(_ffi_call_SYSV):  Add missing function type symbol .def and
	add EH markup labels.
	(_ffi_call_STDCALL):  Likewise.
	(_ffi_closure_SYSV):  Likewise.
	(_ffi_closure_raw_SYSV):  Likewise.
	(.eh_frame):  Add hand-crafted EH data.

From-SVN: r147800
parent fe2978fb
2009-05-22 Dave Korn <dave.korn.cygwin@gmail.com>
* configure.ac: Also check if assembler supports pc-relative
relocs on X86_WIN32 targets.
* configure: Regenerate.
* src/x86/win32.S (ffi_prep_args): Declare extern, not global.
(_ffi_call_SYSV): Add missing function type symbol .def and
add EH markup labels.
(_ffi_call_STDCALL): Likewise.
(_ffi_closure_SYSV): Likewise.
(_ffi_closure_raw_SYSV): Likewise.
(.eh_frame): Add hand-crafted EH data.
2009-04-09 Jakub Jelinek <jakub@redhat.com> 2009-04-09 Jakub Jelinek <jakub@redhat.com>
* testsuite/lib/libffi-dg.exp: Change copyright header to refer to * testsuite/lib/libffi-dg.exp: Change copyright header to refer to
......
...@@ -13263,7 +13263,7 @@ _ACEOF ...@@ -13263,7 +13263,7 @@ _ACEOF
fi fi
fi fi
if test x$TARGET = xX86 || test x$TARGET = xX86_64; then if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
echo "$as_me:$LINENO: checking assembler supports pc related relocs" >&5 echo "$as_me:$LINENO: checking assembler supports pc related relocs" >&5
echo $ECHO_N "checking assembler supports pc related relocs... $ECHO_C" >&6 echo $ECHO_N "checking assembler supports pc related relocs... $ECHO_C" >&6
if test "${libffi_cv_as_x86_pcrel+set}" = set; then if test "${libffi_cv_as_x86_pcrel+set}" = set; then
...@@ -14175,6 +14175,9 @@ ac_configure_args="${multilib_arg} ${ac_configure_args}" ...@@ -14175,6 +14175,9 @@ ac_configure_args="${multilib_arg} ${ac_configure_args}"
multi_basedir="$multi_basedir" multi_basedir="$multi_basedir"
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
CC="$CC" CC="$CC"
CXX="$CXX"
GFORTRAN="$GFORTRAN"
GCJ="$GCJ"
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
......
...@@ -240,7 +240,7 @@ if test x$TARGET = xSPARC; then ...@@ -240,7 +240,7 @@ if test x$TARGET = xSPARC; then
fi fi
fi fi
if test x$TARGET = xX86 || test x$TARGET = xX86_64; then if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
AC_CACHE_CHECK([assembler supports pc related relocs], AC_CACHE_CHECK([assembler supports pc related relocs],
libffi_cv_as_x86_pcrel, [ libffi_cv_as_x86_pcrel, [
libffi_cv_as_x86_pcrel=yes libffi_cv_as_x86_pcrel=yes
......
/* ----------------------------------------------------------------------- /* -----------------------------------------------------------------------
win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc. win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc.
Copyright (c) 2001 John Beniton Copyright (c) 2001 John Beniton
Copyright (c) 2002 Ranjit Mathew Copyright (c) 2002 Ranjit Mathew
...@@ -30,18 +30,20 @@ ...@@ -30,18 +30,20 @@
#include <fficonfig.h> #include <fficonfig.h>
#include <ffi.h> #include <ffi.h>
.text .text
.globl ffi_prep_args .extern ffi_prep_args
# This assumes we are using gas. # This assumes we are using gas.
.balign 16 .balign 16
.globl _ffi_call_SYSV .globl _ffi_call_SYSV
.def _ffi_call_SYSV; .scl 2; .type 32; .endef
_ffi_call_SYSV: _ffi_call_SYSV:
.LFB1:
pushl %ebp pushl %ebp
.LCFI0:
movl %esp,%ebp movl %esp,%ebp
.LCFI1:
# Make room for all of the new args. # Make room for all of the new args.
movl 16(%ebp),%ecx movl 16(%ebp),%ecx
subl %ecx,%esp subl %ecx,%esp
...@@ -144,17 +146,19 @@ epilogue: ...@@ -144,17 +146,19 @@ epilogue:
movl %ebp,%esp movl %ebp,%esp
popl %ebp popl %ebp
ret ret
.ffi_call_SYSV_end: .ffi_call_SYSV_end:
.LFE1:
# This assumes we are using gas. # This assumes we are using gas.
.balign 16 .balign 16
.globl _ffi_call_STDCALL .globl _ffi_call_STDCALL
.def _ffi_call_STDCALL; .scl 2; .type 32; .endef
_ffi_call_STDCALL: _ffi_call_STDCALL:
.LFB2:
pushl %ebp pushl %ebp
.LCFI2:
movl %esp,%ebp movl %esp,%ebp
.LCFI3:
# Make room for all of the new args. # Make room for all of the new args.
movl 16(%ebp),%ecx movl 16(%ebp),%ecx
subl %ecx,%esp subl %ecx,%esp
...@@ -255,13 +259,19 @@ sc_epilogue: ...@@ -255,13 +259,19 @@ sc_epilogue:
movl %ebp,%esp movl %ebp,%esp
popl %ebp popl %ebp
ret ret
.ffi_call_STDCALL_end: .ffi_call_STDCALL_end:
.LFE2:
.globl _ffi_closure_SYSV # This assumes we are using gas.
.balign 16
.globl _ffi_closure_SYSV
.def _ffi_closure_SYSV; .scl 2; .type 32; .endef
_ffi_closure_SYSV: _ffi_closure_SYSV:
.LFB3:
pushl %ebp pushl %ebp
.LCFI4:
movl %esp, %ebp movl %esp, %ebp
.LCFI5:
subl $40, %esp subl $40, %esp
leal -24(%ebp), %edx leal -24(%ebp), %edx
movl %edx, -12(%ebp) /* resp */ movl %edx, -12(%ebp) /* resp */
...@@ -312,6 +322,7 @@ _ffi_closure_SYSV: ...@@ -312,6 +322,7 @@ _ffi_closure_SYSV:
movswl (%ecx), %eax movswl (%ecx), %eax
jmp .Lcls_epilogue jmp .Lcls_epilogue
.ffi_closure_SYSV_end: .ffi_closure_SYSV_end:
.LFE3:
#if !FFI_NO_RAW_API #if !FFI_NO_RAW_API
...@@ -320,12 +331,18 @@ _ffi_closure_SYSV: ...@@ -320,12 +331,18 @@ _ffi_closure_SYSV:
#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
#define CIF_FLAGS_OFFSET 20 #define CIF_FLAGS_OFFSET 20
.balign 16 # This assumes we are using gas.
.globl _ffi_closure_raw_SYSV .balign 16
.globl _ffi_closure_raw_SYSV
.def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef
_ffi_closure_raw_SYSV: _ffi_closure_raw_SYSV:
.LFB4:
pushl %ebp pushl %ebp
.LCFI6:
movl %esp, %ebp movl %esp, %ebp
.LCFI7:
pushl %esi pushl %esi
.LCFI8:
subl $36, %esp subl $36, %esp
movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
...@@ -369,5 +386,169 @@ _ffi_closure_raw_SYSV: ...@@ -369,5 +386,169 @@ _ffi_closure_raw_SYSV:
movl -20(%ebp), %edx movl -20(%ebp), %edx
jmp .Lrcls_epilogue jmp .Lrcls_epilogue
.ffi_closure_raw_SYSV_end: .ffi_closure_raw_SYSV_end:
.LFE4:
#endif /* !FFI_NO_RAW_API */
.section .eh_frame,"w"
.Lframe1:
.LSCIE1:
.long .LECIE1-.LASCIE1 /* Length of Common Information Entry */
.LASCIE1:
.long 0x0 /* CIE Identifier Tag */
.byte 0x1 /* CIE Version */
#ifdef __PIC__
.ascii "zR\0" /* CIE Augmentation */
#else
.ascii "\0" /* CIE Augmentation */
#endif
.byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */
.byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */
.byte 0x8 /* CIE RA Column */
#ifdef __PIC__
.byte 0x1 /* .uleb128 0x1; Augmentation size */
.byte 0x1b /* FDE Encoding (pcrel sdata4) */
#endif
.byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */
.byte 0x4 /* .uleb128 0x4 */
.byte 0x4 /* .uleb128 0x4 */
.byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */
.byte 0x1 /* .uleb128 0x1 */
.align 4
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1 /* FDE Length */
.LASFDE1:
.long .LASFDE1-.Lframe1 /* FDE CIE offset */
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
.long .LFB1-. /* FDE initial location */
#else
.long .LFB1
#endif
.long .LFE1-.LFB1 /* FDE address range */
#ifdef __PIC__
.byte 0x0 /* .uleb128 0x0; Augmentation size */
#endif
/* DW_CFA_xxx CFI instructions go here. */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI0-.LFB1
.byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
.byte 0x8 /* .uleb128 0x8 */
.byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
.byte 0x2 /* .uleb128 0x2 */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI1-.LCFI0
.byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
.byte 0x5 /* .uleb128 0x5 */
/* End of DW_CFA_xxx CFI instructions. */
.align 4
.LEFDE1:
.LSFDE2:
.long .LEFDE2-.LASFDE2 /* FDE Length */
.LASFDE2:
.long .LASFDE2-.Lframe1 /* FDE CIE offset */
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
.long .LFB2-. /* FDE initial location */
#else
.long .LFB2
#endif #endif
.long .LFE2-.LFB2 /* FDE address range */
#ifdef __PIC__
.byte 0x0 /* .uleb128 0x0; Augmentation size */
#endif
/* DW_CFA_xxx CFI instructions go here. */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI2-.LFB2
.byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
.byte 0x8 /* .uleb128 0x8 */
.byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
.byte 0x2 /* .uleb128 0x2 */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI3-.LCFI2
.byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
.byte 0x5 /* .uleb128 0x5 */
/* End of DW_CFA_xxx CFI instructions. */
.align 4
.LEFDE2:
.LSFDE3:
.long .LEFDE3-.LASFDE3 /* FDE Length */
.LASFDE3:
.long .LASFDE3-.Lframe1 /* FDE CIE offset */
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
.long .LFB3-. /* FDE initial location */
#else
.long .LFB3
#endif
.long .LFE3-.LFB3 /* FDE address range */
#ifdef __PIC__
.byte 0x0 /* .uleb128 0x0; Augmentation size */
#endif
/* DW_CFA_xxx CFI instructions go here. */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI4-.LFB3
.byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
.byte 0x8 /* .uleb128 0x8 */
.byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
.byte 0x2 /* .uleb128 0x2 */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI5-.LCFI4
.byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
.byte 0x5 /* .uleb128 0x5 */
/* End of DW_CFA_xxx CFI instructions. */
.align 4
.LEFDE3:
#if !FFI_NO_RAW_API
.LSFDE4:
.long .LEFDE4-.LASFDE4 /* FDE Length */
.LASFDE4:
.long .LASFDE4-.Lframe1 /* FDE CIE offset */
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
.long .LFB4-. /* FDE initial location */
#else
.long .LFB4
#endif
.long .LFE4-.LFB4 /* FDE address range */
#ifdef __PIC__
.byte 0x0 /* .uleb128 0x0; Augmentation size */
#endif
/* DW_CFA_xxx CFI instructions go here. */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI6-.LFB4
.byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
.byte 0x8 /* .uleb128 0x8 */
.byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
.byte 0x2 /* .uleb128 0x2 */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI7-.LCFI6
.byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
.byte 0x5 /* .uleb128 0x5 */
.byte 0x4 /* DW_CFA_advance_loc4 */
.long .LCFI8-.LCFI7
.byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */
.byte 0x3 /* .uleb128 0x3 */
/* End of DW_CFA_xxx CFI instructions. */
.align 4
.LEFDE4:
#endif /* !FFI_NO_RAW_API */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment