mirror of git://gcc.gnu.org/git/gcc.git
configure.ac: Add TARGET for x86_64-*-darwin*.
2006-12-14 Andreas Tobler <a.tobler@schweiz.org> * configure.ac: Add TARGET for x86_64-*-darwin*. * Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources for X86_DARWIN. * src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*. * src/x86/darwin64.S: New file for x86_64-*-darwin* support. * configure: Regenerate. * Makefile.in: Regenerate. * include/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. * testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for ffi_call only. From-SVN: r119856
This commit is contained in:
parent
2a67bec24f
commit
f4f7486bcf
|
|
@ -1,3 +1,17 @@
|
||||||
|
2006-12-14 Andreas Tobler <a.tobler@schweiz.org>
|
||||||
|
|
||||||
|
* configure.ac: Add TARGET for x86_64-*-darwin*.
|
||||||
|
* Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources
|
||||||
|
for X86_DARWIN.
|
||||||
|
* src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*.
|
||||||
|
* src/x86/darwin64.S: New file for x86_64-*-darwin* support.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
* include/Makefile.in: Regenerate.
|
||||||
|
* testsuite/Makefile.in: Regenerate.
|
||||||
|
* testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for
|
||||||
|
ffi_call only.
|
||||||
|
|
||||||
2006-12-13 Andreas Tobler <a.tobler@schweiz.org>
|
2006-12-13 Andreas Tobler <a.tobler@schweiz.org>
|
||||||
|
|
||||||
* aclocal.m4: Regenerate with aclocal -I .. as written in the
|
* aclocal.m4: Regenerate with aclocal -I .. as written in the
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ if X86_WIN32
|
||||||
nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S
|
nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S
|
||||||
endif
|
endif
|
||||||
if X86_DARWIN
|
if X86_DARWIN
|
||||||
nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S
|
nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S
|
||||||
endif
|
endif
|
||||||
if SPARC
|
if SPARC
|
||||||
nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
nodist_libffi_la_SOURCES += src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ target_triplet = @target@
|
||||||
@MIPS_LINUX_TRUE@am__append_2 = src/mips/ffi.c src/mips/o32.S
|
@MIPS_LINUX_TRUE@am__append_2 = src/mips/ffi.c src/mips/o32.S
|
||||||
@X86_TRUE@am__append_3 = src/x86/ffi.c src/x86/sysv.S
|
@X86_TRUE@am__append_3 = src/x86/ffi.c src/x86/sysv.S
|
||||||
@X86_WIN32_TRUE@am__append_4 = src/x86/ffi.c src/x86/win32.S
|
@X86_WIN32_TRUE@am__append_4 = src/x86/ffi.c src/x86/win32.S
|
||||||
@X86_DARWIN_TRUE@am__append_5 = src/x86/ffi.c src/x86/darwin.S
|
@X86_DARWIN_TRUE@am__append_5 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S
|
||||||
@SPARC_TRUE@am__append_6 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
@SPARC_TRUE@am__append_6 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
||||||
@ALPHA_TRUE@am__append_7 = src/alpha/ffi.c src/alpha/osf.S
|
@ALPHA_TRUE@am__append_7 = src/alpha/ffi.c src/alpha/osf.S
|
||||||
@IA64_TRUE@am__append_8 = src/ia64/ffi.c src/ia64/unix.S
|
@IA64_TRUE@am__append_8 = src/ia64/ffi.c src/ia64/unix.S
|
||||||
|
|
@ -69,8 +69,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \
|
||||||
$(top_srcdir)/configure ChangeLog
|
$(top_srcdir)/configure ChangeLog
|
||||||
subdir = .
|
subdir = .
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
|
|
@ -96,7 +96,8 @@ am_libffi_la_OBJECTS = src/debug.lo src/prep_cif.lo src/types.lo \
|
||||||
@MIPS_LINUX_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo
|
@MIPS_LINUX_TRUE@am__objects_2 = src/mips/ffi.lo src/mips/o32.lo
|
||||||
@X86_TRUE@am__objects_3 = src/x86/ffi.lo src/x86/sysv.lo
|
@X86_TRUE@am__objects_3 = src/x86/ffi.lo src/x86/sysv.lo
|
||||||
@X86_WIN32_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/win32.lo
|
@X86_WIN32_TRUE@am__objects_4 = src/x86/ffi.lo src/x86/win32.lo
|
||||||
@X86_DARWIN_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/darwin.lo
|
@X86_DARWIN_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/darwin.lo \
|
||||||
|
@X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo
|
||||||
@SPARC_TRUE@am__objects_6 = src/sparc/ffi.lo src/sparc/v8.lo \
|
@SPARC_TRUE@am__objects_6 = src/sparc/ffi.lo src/sparc/v8.lo \
|
||||||
@SPARC_TRUE@ src/sparc/v9.lo
|
@SPARC_TRUE@ src/sparc/v9.lo
|
||||||
@ALPHA_TRUE@am__objects_7 = src/alpha/ffi.lo src/alpha/osf.lo
|
@ALPHA_TRUE@am__objects_7 = src/alpha/ffi.lo src/alpha/osf.lo
|
||||||
|
|
@ -159,11 +160,11 @@ LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
|
||||||
$(CCASFLAGS)
|
$(CCASFLAGS)
|
||||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
|
||||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||||
$(AM_CFLAGS) $(CFLAGS)
|
$(AM_CFLAGS) $(CFLAGS)
|
||||||
CCLD = $(CC)
|
CCLD = $(CC)
|
||||||
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \
|
SOURCES = $(libffi_la_SOURCES) $(nodist_libffi_la_SOURCES) \
|
||||||
$(libffi_convenience_la_SOURCES) \
|
$(libffi_convenience_la_SOURCES) \
|
||||||
|
|
@ -203,7 +204,6 @@ AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
|
AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
|
||||||
AR = @AR@
|
|
||||||
ARM_FALSE = @ARM_FALSE@
|
ARM_FALSE = @ARM_FALSE@
|
||||||
ARM_TRUE = @ARM_TRUE@
|
ARM_TRUE = @ARM_TRUE@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
|
|
@ -217,24 +217,16 @@ CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
CPP = @CPP@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
CXX = @CXX@
|
|
||||||
CXXCPP = @CXXCPP@
|
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
|
||||||
CXXFLAGS = @CXXFLAGS@
|
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
ECHO = @ECHO@
|
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
|
||||||
FFLAGS = @FFLAGS@
|
|
||||||
FRV_FALSE = @FRV_FALSE@
|
FRV_FALSE = @FRV_FALSE@
|
||||||
FRV_TRUE = @FRV_TRUE@
|
FRV_TRUE = @FRV_TRUE@
|
||||||
GREP = @GREP@
|
|
||||||
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
||||||
IA64_FALSE = @IA64_FALSE@
|
IA64_FALSE = @IA64_FALSE@
|
||||||
IA64_TRUE = @IA64_TRUE@
|
IA64_TRUE = @IA64_TRUE@
|
||||||
|
|
@ -242,7 +234,6 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
LDFLAGS = @LDFLAGS@
|
|
||||||
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
||||||
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
|
@ -310,12 +301,10 @@ X86_TRUE = @X86_TRUE@
|
||||||
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
||||||
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_F77 = @ac_ct_F77@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
||||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
|
|
@ -328,31 +317,24 @@ build_cpu = @build_cpu@
|
||||||
build_os = @build_os@
|
build_os = @build_os@
|
||||||
build_vendor = @build_vendor@
|
build_vendor = @build_vendor@
|
||||||
datadir = @datadir@
|
datadir = @datadir@
|
||||||
datarootdir = @datarootdir@
|
|
||||||
docdir = @docdir@
|
|
||||||
dvidir = @dvidir@
|
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
host = @host@
|
host = @host@
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_cpu = @host_cpu@
|
host_cpu = @host_cpu@
|
||||||
host_os = @host_os@
|
host_os = @host_os@
|
||||||
host_vendor = @host_vendor@
|
host_vendor = @host_vendor@
|
||||||
htmldir = @htmldir@
|
|
||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
install_sh = @install_sh@
|
install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localedir = @localedir@
|
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
oldincludedir = @oldincludedir@
|
oldincludedir = @oldincludedir@
|
||||||
pdfdir = @pdfdir@
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
|
|
@ -576,6 +558,10 @@ src/x86/win32.lo: src/x86/$(am__dirstamp) \
|
||||||
src/x86/$(DEPDIR)/$(am__dirstamp)
|
src/x86/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/x86/darwin.lo: src/x86/$(am__dirstamp) \
|
src/x86/darwin.lo: src/x86/$(am__dirstamp) \
|
||||||
src/x86/$(DEPDIR)/$(am__dirstamp)
|
src/x86/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/x86/ffi64.lo: src/x86/$(am__dirstamp) \
|
||||||
|
src/x86/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/x86/darwin64.lo: src/x86/$(am__dirstamp) \
|
||||||
|
src/x86/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/sparc/$(am__dirstamp):
|
src/sparc/$(am__dirstamp):
|
||||||
@$(mkdir_p) src/sparc
|
@$(mkdir_p) src/sparc
|
||||||
@: > src/sparc/$(am__dirstamp)
|
@: > src/sparc/$(am__dirstamp)
|
||||||
|
|
@ -694,8 +680,6 @@ src/s390/sysv.lo: src/s390/$(am__dirstamp) \
|
||||||
src/s390/$(DEPDIR)/$(am__dirstamp)
|
src/s390/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/s390/ffi.lo: src/s390/$(am__dirstamp) \
|
src/s390/ffi.lo: src/s390/$(am__dirstamp) \
|
||||||
src/s390/$(DEPDIR)/$(am__dirstamp)
|
src/s390/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/x86/ffi64.lo: src/x86/$(am__dirstamp) \
|
|
||||||
src/x86/$(DEPDIR)/$(am__dirstamp)
|
|
||||||
src/x86/unix64.lo: src/x86/$(am__dirstamp) \
|
src/x86/unix64.lo: src/x86/$(am__dirstamp) \
|
||||||
src/x86/$(DEPDIR)/$(am__dirstamp)
|
src/x86/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/sh/$(am__dirstamp):
|
src/sh/$(am__dirstamp):
|
||||||
|
|
@ -825,6 +809,8 @@ mostlyclean-compile:
|
||||||
-rm -f src/types.lo
|
-rm -f src/types.lo
|
||||||
-rm -f src/x86/darwin.$(OBJEXT)
|
-rm -f src/x86/darwin.$(OBJEXT)
|
||||||
-rm -f src/x86/darwin.lo
|
-rm -f src/x86/darwin.lo
|
||||||
|
-rm -f src/x86/darwin64.$(OBJEXT)
|
||||||
|
-rm -f src/x86/darwin64.lo
|
||||||
-rm -f src/x86/ffi.$(OBJEXT)
|
-rm -f src/x86/ffi.$(OBJEXT)
|
||||||
-rm -f src/x86/ffi.lo
|
-rm -f src/x86/ffi.lo
|
||||||
-rm -f src/x86/ffi64.$(OBJEXT)
|
-rm -f src/x86/ffi64.$(OBJEXT)
|
||||||
|
|
|
||||||
|
|
@ -5415,6 +5415,7 @@ cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris;;
|
||||||
s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
||||||
s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
||||||
x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
|
x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
|
||||||
|
x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86;;
|
||||||
sh-*-linux* | sh[34]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
|
sh-*-linux* | sh[34]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
|
||||||
sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
|
sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
|
||||||
sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
|
sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris;;
|
||||||
s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
s390-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
||||||
s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
s390x-*-linux-*) TARGET=S390; TARGETDIR=s390;;
|
||||||
x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
|
x86_64-*-linux* | x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) TARGET=X86_64; TARGETDIR=x86;;
|
||||||
|
x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86;;
|
||||||
sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
|
sh-*-linux* | sh[[34]]*-*-linux*) TARGET=SH; TARGETDIR=sh;;
|
||||||
sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
|
sh-*-rtems*) TARGET=SH; TARGETDIR=sh;;
|
||||||
sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
|
sh64-*-linux* | sh5*-*-linux*) TARGET=SH64; TARGETDIR=sh64;;
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ subdir = include
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||||
$(srcdir)/ffi.h.in $(toollibffi_HEADERS)
|
$(srcdir)/ffi.h.in $(toollibffi_HEADERS)
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||||
|
|
@ -70,7 +70,6 @@ AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
|
AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@
|
||||||
AR = @AR@
|
|
||||||
ARM_FALSE = @ARM_FALSE@
|
ARM_FALSE = @ARM_FALSE@
|
||||||
ARM_TRUE = @ARM_TRUE@
|
ARM_TRUE = @ARM_TRUE@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
|
|
@ -84,24 +83,16 @@ CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
CPP = @CPP@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
CXX = @CXX@
|
|
||||||
CXXCPP = @CXXCPP@
|
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
|
||||||
CXXFLAGS = @CXXFLAGS@
|
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
ECHO = @ECHO@
|
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
|
||||||
FFLAGS = @FFLAGS@
|
|
||||||
FRV_FALSE = @FRV_FALSE@
|
FRV_FALSE = @FRV_FALSE@
|
||||||
FRV_TRUE = @FRV_TRUE@
|
FRV_TRUE = @FRV_TRUE@
|
||||||
GREP = @GREP@
|
|
||||||
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
||||||
IA64_FALSE = @IA64_FALSE@
|
IA64_FALSE = @IA64_FALSE@
|
||||||
IA64_TRUE = @IA64_TRUE@
|
IA64_TRUE = @IA64_TRUE@
|
||||||
|
|
@ -109,7 +100,6 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
LDFLAGS = @LDFLAGS@
|
|
||||||
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
||||||
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
|
@ -177,12 +167,10 @@ X86_TRUE = @X86_TRUE@
|
||||||
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
||||||
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_F77 = @ac_ct_F77@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
||||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
|
|
@ -195,31 +183,24 @@ build_cpu = @build_cpu@
|
||||||
build_os = @build_os@
|
build_os = @build_os@
|
||||||
build_vendor = @build_vendor@
|
build_vendor = @build_vendor@
|
||||||
datadir = @datadir@
|
datadir = @datadir@
|
||||||
datarootdir = @datarootdir@
|
|
||||||
docdir = @docdir@
|
|
||||||
dvidir = @dvidir@
|
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
host = @host@
|
host = @host@
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_cpu = @host_cpu@
|
host_cpu = @host_cpu@
|
||||||
host_os = @host_os@
|
host_os = @host_os@
|
||||||
host_vendor = @host_vendor@
|
host_vendor = @host_vendor@
|
||||||
htmldir = @htmldir@
|
|
||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
install_sh = @install_sh@
|
install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localedir = @localedir@
|
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
oldincludedir = @oldincludedir@
|
oldincludedir = @oldincludedir@
|
||||||
pdfdir = @pdfdir@
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,415 @@
|
||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc.
|
||||||
|
derived from unix64.S
|
||||||
|
|
||||||
|
x86-64 Foreign Function Interface for Darwin.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
#define LIBFFI_ASM
|
||||||
|
#include <fficonfig.h>
|
||||||
|
#include <ffi.h>
|
||||||
|
|
||||||
|
.file "darwin64.S"
|
||||||
|
.text
|
||||||
|
|
||||||
|
/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
|
||||||
|
void *raddr, void (*fnaddr)());
|
||||||
|
|
||||||
|
Bit o trickiness here -- ARGS+BYTES is the base of the stack frame
|
||||||
|
for this function. This has been allocated by ffi_call. We also
|
||||||
|
deallocate some of the stack that has been alloca'd. */
|
||||||
|
|
||||||
|
.align 3
|
||||||
|
.globl _ffi_call_unix64
|
||||||
|
|
||||||
|
_ffi_call_unix64:
|
||||||
|
LUW0:
|
||||||
|
movq (%rsp), %r10 /* Load return address. */
|
||||||
|
leaq (%rdi, %rsi), %rax /* Find local stack base. */
|
||||||
|
movq %rdx, (%rax) /* Save flags. */
|
||||||
|
movq %rcx, 8(%rax) /* Save raddr. */
|
||||||
|
movq %rbp, 16(%rax) /* Save old frame pointer. */
|
||||||
|
movq %r10, 24(%rax) /* Relocate return address. */
|
||||||
|
movq %rax, %rbp /* Finalize local stack frame. */
|
||||||
|
LUW1:
|
||||||
|
movq %rdi, %r10 /* Save a copy of the register area. */
|
||||||
|
movq %r8, %r11 /* Save a copy of the target fn. */
|
||||||
|
movl %r9d, %eax /* Set number of SSE registers. */
|
||||||
|
|
||||||
|
/* Load up all argument registers. */
|
||||||
|
movq (%r10), %rdi
|
||||||
|
movq 8(%r10), %rsi
|
||||||
|
movq 16(%r10), %rdx
|
||||||
|
movq 24(%r10), %rcx
|
||||||
|
movq 32(%r10), %r8
|
||||||
|
movq 40(%r10), %r9
|
||||||
|
testl %eax, %eax
|
||||||
|
jnz Lload_sse
|
||||||
|
Lret_from_load_sse:
|
||||||
|
|
||||||
|
/* Deallocate the reg arg area. */
|
||||||
|
leaq 176(%r10), %rsp
|
||||||
|
|
||||||
|
/* Call the user function. */
|
||||||
|
call *%r11
|
||||||
|
|
||||||
|
/* Deallocate stack arg area; local stack frame in redzone. */
|
||||||
|
leaq 24(%rbp), %rsp
|
||||||
|
|
||||||
|
movq 0(%rbp), %rcx /* Reload flags. */
|
||||||
|
movq 8(%rbp), %rdi /* Reload raddr. */
|
||||||
|
movq 16(%rbp), %rbp /* Reload old frame pointer. */
|
||||||
|
LUW2:
|
||||||
|
|
||||||
|
/* The first byte of the flags contains the FFI_TYPE. */
|
||||||
|
movzbl %cl, %r10d
|
||||||
|
leaq Lstore_table(%rip), %r11
|
||||||
|
movslq (%r11, %r10, 4), %r10
|
||||||
|
addq %r11, %r10
|
||||||
|
jmp *%r10
|
||||||
|
|
||||||
|
Lstore_table:
|
||||||
|
.long Lst_void-Lstore_table /* FFI_TYPE_VOID */
|
||||||
|
.long Lst_sint32-Lstore_table /* FFI_TYPE_INT */
|
||||||
|
.long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */
|
||||||
|
.long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */
|
||||||
|
.long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */
|
||||||
|
.long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */
|
||||||
|
.long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */
|
||||||
|
.long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */
|
||||||
|
.long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */
|
||||||
|
.long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */
|
||||||
|
.long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */
|
||||||
|
.long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */
|
||||||
|
.long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */
|
||||||
|
.long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */
|
||||||
|
.long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 3
|
||||||
|
Lst_void:
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_uint8:
|
||||||
|
movzbq %al, %rax
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_sint8:
|
||||||
|
movsbq %al, %rax
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_uint16:
|
||||||
|
movzwq %ax, %rax
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
.align 3
|
||||||
|
Lst_sint16:
|
||||||
|
movswq %ax, %rax
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_uint32:
|
||||||
|
movl %eax, %eax
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
.align 3
|
||||||
|
Lst_sint32:
|
||||||
|
cltq
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_int64:
|
||||||
|
movq %rax, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_float:
|
||||||
|
movss %xmm0, (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_double:
|
||||||
|
movsd %xmm0, (%rdi)
|
||||||
|
ret
|
||||||
|
Lst_ldouble:
|
||||||
|
fstpt (%rdi)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lst_struct:
|
||||||
|
leaq -20(%rsp), %rsi /* Scratch area in redzone. */
|
||||||
|
|
||||||
|
/* We have to locate the values now, and since we don't want to
|
||||||
|
write too much data into the user's return value, we spill the
|
||||||
|
value to a 16 byte scratch area first. Bits 8, 9, and 10
|
||||||
|
control where the values are located. Only one of the three
|
||||||
|
bits will be set; see ffi_prep_cif_machdep for the pattern. */
|
||||||
|
movd %xmm0, %r10
|
||||||
|
movd %xmm1, %r11
|
||||||
|
testl $0x100, %ecx
|
||||||
|
cmovnz %rax, %rdx
|
||||||
|
cmovnz %r10, %rax
|
||||||
|
testl $0x200, %ecx
|
||||||
|
cmovnz %r10, %rdx
|
||||||
|
testl $0x400, %ecx
|
||||||
|
cmovnz %r10, %rax
|
||||||
|
cmovnz %r11, %rdx
|
||||||
|
movq %rax, (%rsi)
|
||||||
|
movq %rdx, 8(%rsi)
|
||||||
|
|
||||||
|
/* Bits 12-31 contain the true size of the structure. Copy from
|
||||||
|
the scratch area to the true destination. */
|
||||||
|
shrl $12, %ecx
|
||||||
|
rep movsb
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* Many times we can avoid loading any SSE registers at all.
|
||||||
|
It's not worth an indirect jump to load the exact set of
|
||||||
|
SSE registers needed; zero or all is a good compromise. */
|
||||||
|
.align 3
|
||||||
|
LUW3:
|
||||||
|
Lload_sse:
|
||||||
|
movdqa 48(%r10), %xmm0
|
||||||
|
movdqa 64(%r10), %xmm1
|
||||||
|
movdqa 80(%r10), %xmm2
|
||||||
|
movdqa 96(%r10), %xmm3
|
||||||
|
movdqa 112(%r10), %xmm4
|
||||||
|
movdqa 128(%r10), %xmm5
|
||||||
|
movdqa 144(%r10), %xmm6
|
||||||
|
movdqa 160(%r10), %xmm7
|
||||||
|
jmp Lret_from_load_sse
|
||||||
|
|
||||||
|
LUW4:
|
||||||
|
.align 3
|
||||||
|
.globl _ffi_closure_unix64
|
||||||
|
|
||||||
|
_ffi_closure_unix64:
|
||||||
|
LUW5:
|
||||||
|
/* The carry flag is set by the trampoline iff SSE registers
|
||||||
|
are used. Don't clobber it before the branch instruction. */
|
||||||
|
leaq -200(%rsp), %rsp
|
||||||
|
LUW6:
|
||||||
|
movq %rdi, (%rsp)
|
||||||
|
movq %rsi, 8(%rsp)
|
||||||
|
movq %rdx, 16(%rsp)
|
||||||
|
movq %rcx, 24(%rsp)
|
||||||
|
movq %r8, 32(%rsp)
|
||||||
|
movq %r9, 40(%rsp)
|
||||||
|
jc Lsave_sse
|
||||||
|
Lret_from_save_sse:
|
||||||
|
|
||||||
|
movq %r10, %rdi
|
||||||
|
leaq 176(%rsp), %rsi
|
||||||
|
movq %rsp, %rdx
|
||||||
|
leaq 208(%rsp), %rcx
|
||||||
|
call _ffi_closure_unix64_inner
|
||||||
|
|
||||||
|
/* Deallocate stack frame early; return value is now in redzone. */
|
||||||
|
addq $200, %rsp
|
||||||
|
LUW7:
|
||||||
|
|
||||||
|
/* The first byte of the return value contains the FFI_TYPE. */
|
||||||
|
movzbl %al, %r10d
|
||||||
|
leaq Lload_table(%rip), %r11
|
||||||
|
movslq (%r11, %r10, 4), %r10
|
||||||
|
addq %r11, %r10
|
||||||
|
jmp *%r10
|
||||||
|
|
||||||
|
Lload_table:
|
||||||
|
.long Lld_void-Lload_table /* FFI_TYPE_VOID */
|
||||||
|
.long Lld_int32-Lload_table /* FFI_TYPE_INT */
|
||||||
|
.long Lld_float-Lload_table /* FFI_TYPE_FLOAT */
|
||||||
|
.long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */
|
||||||
|
.long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */
|
||||||
|
.long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */
|
||||||
|
.long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */
|
||||||
|
.long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */
|
||||||
|
.long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */
|
||||||
|
.long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */
|
||||||
|
.long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */
|
||||||
|
.long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */
|
||||||
|
.long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */
|
||||||
|
.long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */
|
||||||
|
.long Lld_int64-Lload_table /* FFI_TYPE_POINTER */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 3
|
||||||
|
Lld_void:
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_int8:
|
||||||
|
movzbl -24(%rsp), %eax
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_int16:
|
||||||
|
movzwl -24(%rsp), %eax
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_int32:
|
||||||
|
movl -24(%rsp), %eax
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_int64:
|
||||||
|
movq -24(%rsp), %rax
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_float:
|
||||||
|
movss -24(%rsp), %xmm0
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_double:
|
||||||
|
movsd -24(%rsp), %xmm0
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_ldouble:
|
||||||
|
fldt -24(%rsp)
|
||||||
|
ret
|
||||||
|
.align 3
|
||||||
|
Lld_struct:
|
||||||
|
/* There are four possibilities here, %rax/%rdx, %xmm0/%rax,
|
||||||
|
%rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading
|
||||||
|
both rdx and xmm1 with the second word. For the remaining,
|
||||||
|
bit 8 set means xmm0 gets the second word, and bit 9 means
|
||||||
|
that rax gets the second word. */
|
||||||
|
movq -24(%rsp), %rcx
|
||||||
|
movq -16(%rsp), %rdx
|
||||||
|
movq -16(%rsp), %xmm1
|
||||||
|
testl $0x100, %eax
|
||||||
|
cmovnz %rdx, %rcx
|
||||||
|
movd %rcx, %xmm0
|
||||||
|
testl $0x200, %eax
|
||||||
|
movq -24(%rsp), %rax
|
||||||
|
cmovnz %rdx, %rax
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* See the comment above Lload_sse; the same logic applies here. */
|
||||||
|
.align 3
|
||||||
|
LUW8:
|
||||||
|
Lsave_sse:
|
||||||
|
movdqa %xmm0, 48(%rsp)
|
||||||
|
movdqa %xmm1, 64(%rsp)
|
||||||
|
movdqa %xmm2, 80(%rsp)
|
||||||
|
movdqa %xmm3, 96(%rsp)
|
||||||
|
movdqa %xmm4, 112(%rsp)
|
||||||
|
movdqa %xmm5, 128(%rsp)
|
||||||
|
movdqa %xmm6, 144(%rsp)
|
||||||
|
movdqa %xmm7, 160(%rsp)
|
||||||
|
jmp Lret_from_save_sse
|
||||||
|
|
||||||
|
LUW9:
|
||||||
|
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
|
||||||
|
EH_frame1:
|
||||||
|
.set L$set$0,LECIE1-LSCIE1 /* CIE Length */
|
||||||
|
.long L$set$0
|
||||||
|
LSCIE1:
|
||||||
|
.long 0x0 /* CIE Identifier Tag */
|
||||||
|
.byte 0x1 /* CIE Version */
|
||||||
|
.ascii "zR\0" /* CIE Augmentation */
|
||||||
|
.byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */
|
||||||
|
.byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */
|
||||||
|
.byte 0x10 /* CIE RA Column */
|
||||||
|
.byte 0x1 /* uleb128 0x1; Augmentation size */
|
||||||
|
.byte 0x10 /* FDE Encoding (pcrel sdata4) */
|
||||||
|
.byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
|
||||||
|
.byte 0x7 /* uleb128 0x7 */
|
||||||
|
.byte 0x8 /* uleb128 0x8 */
|
||||||
|
.byte 0x90 /* DW_CFA_offset, column 0x10 */
|
||||||
|
.byte 0x1
|
||||||
|
.align 3
|
||||||
|
LECIE1:
|
||||||
|
.globl _ffi_call_unix64.eh
|
||||||
|
_ffi_call_unix64.eh:
|
||||||
|
LSFDE1:
|
||||||
|
.set L$set$1,LEFDE1-LASFDE1 /* FDE Length */
|
||||||
|
.long L$set$1
|
||||||
|
LASFDE1:
|
||||||
|
.long LASFDE1-EH_frame1 /* FDE CIE offset */
|
||||||
|
.quad LUW0-. /* FDE initial location */
|
||||||
|
.set L$set$2,LUW4-LUW0 /* FDE address range */
|
||||||
|
.quad L$set$2
|
||||||
|
.byte 0x0 /* Augmentation size */
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$3,LUW1-LUW0
|
||||||
|
.long L$set$3
|
||||||
|
|
||||||
|
/* New stack frame based off rbp. This is a itty bit of unwind
|
||||||
|
trickery in that the CFA *has* changed. There is no easy way
|
||||||
|
to describe it correctly on entry to the function. Fortunately,
|
||||||
|
it doesn't matter too much since at all points we can correctly
|
||||||
|
unwind back to ffi_call. Note that the location to which we
|
||||||
|
moved the return address is (the new) CFA-8, so from the
|
||||||
|
perspective of the unwind info, it hasn't moved. */
|
||||||
|
.byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */
|
||||||
|
.byte 0x6
|
||||||
|
.byte 0x20
|
||||||
|
.byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */
|
||||||
|
.byte 0x2
|
||||||
|
.byte 0xa /* DW_CFA_remember_state */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$4,LUW2-LUW1
|
||||||
|
.long L$set$4
|
||||||
|
.byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */
|
||||||
|
.byte 0x7
|
||||||
|
.byte 0x8
|
||||||
|
.byte 0xc0+6 /* DW_CFA_restore, %rbp */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$5,LUW3-LUW2
|
||||||
|
.long L$set$5
|
||||||
|
.byte 0xb /* DW_CFA_restore_state */
|
||||||
|
|
||||||
|
.align 3
|
||||||
|
LEFDE1:
|
||||||
|
.globl _ffi_closure_unix64.eh
|
||||||
|
_ffi_closure_unix64.eh:
|
||||||
|
LSFDE3:
|
||||||
|
.set L$set$6,LEFDE3-LASFDE3 /* FDE Length */
|
||||||
|
.long L$set$6
|
||||||
|
LASFDE3:
|
||||||
|
.long LASFDE3-EH_frame1 /* FDE CIE offset */
|
||||||
|
.quad LUW5-. /* FDE initial location */
|
||||||
|
.set L$set$7,LUW9-LUW5 /* FDE address range */
|
||||||
|
.quad L$set$7
|
||||||
|
.byte 0x0 /* Augmentation size */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$8,LUW6-LUW5
|
||||||
|
.long L$set$8
|
||||||
|
.byte 0xe /* DW_CFA_def_cfa_offset */
|
||||||
|
.byte 208,1 /* uleb128 208 */
|
||||||
|
.byte 0xa /* DW_CFA_remember_state */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$9,LUW7-LUW6
|
||||||
|
.long L$set$9
|
||||||
|
.byte 0xe /* DW_CFA_def_cfa_offset */
|
||||||
|
.byte 0x8
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.set L$set$10,LUW8-LUW7
|
||||||
|
.long L$set$10
|
||||||
|
.byte 0xb /* DW_CFA_restore_state */
|
||||||
|
|
||||||
|
.align 3
|
||||||
|
LEFDE3:
|
||||||
|
.subsections_via_symbols
|
||||||
|
|
||||||
|
#endif /* __x86_64__ */
|
||||||
|
|
@ -69,7 +69,7 @@ typedef enum ffi_abi {
|
||||||
|
|
||||||
#define FFI_CLOSURES 1
|
#define FFI_CLOSURES 1
|
||||||
|
|
||||||
#ifdef X86_64
|
#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))
|
||||||
#define FFI_TRAMPOLINE_SIZE 24
|
#define FFI_TRAMPOLINE_SIZE 24
|
||||||
#define FFI_NATIVE_RAW_API 0
|
#define FFI_NATIVE_RAW_API 0
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,8 @@ target_triplet = @target@
|
||||||
subdir = testsuite
|
subdir = testsuite
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
am__aclocal_m4_deps = $(top_srcdir)/../libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||||
|
|
@ -59,7 +59,6 @@ AMDEP_FALSE = @AMDEP_FALSE@
|
||||||
AMDEP_TRUE = @AMDEP_TRUE@
|
AMDEP_TRUE = @AMDEP_TRUE@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
AM_RUNTESTFLAGS =
|
AM_RUNTESTFLAGS =
|
||||||
AR = @AR@
|
|
||||||
ARM_FALSE = @ARM_FALSE@
|
ARM_FALSE = @ARM_FALSE@
|
||||||
ARM_TRUE = @ARM_TRUE@
|
ARM_TRUE = @ARM_TRUE@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
|
|
@ -73,24 +72,16 @@ CCDEPMODE = @CCDEPMODE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CPP = @CPP@
|
CPP = @CPP@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
CXX = @CXX@
|
|
||||||
CXXCPP = @CXXCPP@
|
|
||||||
CXXDEPMODE = @CXXDEPMODE@
|
|
||||||
CXXFLAGS = @CXXFLAGS@
|
|
||||||
CYGPATH_W = @CYGPATH_W@
|
CYGPATH_W = @CYGPATH_W@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
DEPDIR = @DEPDIR@
|
DEPDIR = @DEPDIR@
|
||||||
ECHO = @ECHO@
|
|
||||||
ECHO_C = @ECHO_C@
|
ECHO_C = @ECHO_C@
|
||||||
ECHO_N = @ECHO_N@
|
ECHO_N = @ECHO_N@
|
||||||
ECHO_T = @ECHO_T@
|
ECHO_T = @ECHO_T@
|
||||||
EGREP = @EGREP@
|
EGREP = @EGREP@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
F77 = @F77@
|
|
||||||
FFLAGS = @FFLAGS@
|
|
||||||
FRV_FALSE = @FRV_FALSE@
|
FRV_FALSE = @FRV_FALSE@
|
||||||
FRV_TRUE = @FRV_TRUE@
|
FRV_TRUE = @FRV_TRUE@
|
||||||
GREP = @GREP@
|
|
||||||
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
|
||||||
IA64_FALSE = @IA64_FALSE@
|
IA64_FALSE = @IA64_FALSE@
|
||||||
IA64_TRUE = @IA64_TRUE@
|
IA64_TRUE = @IA64_TRUE@
|
||||||
|
|
@ -98,7 +89,6 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
LDFLAGS = @LDFLAGS@
|
|
||||||
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
LIBFFI_CRIS_FALSE = @LIBFFI_CRIS_FALSE@
|
||||||
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
LIBFFI_CRIS_TRUE = @LIBFFI_CRIS_TRUE@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
|
@ -166,12 +156,10 @@ X86_TRUE = @X86_TRUE@
|
||||||
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
X86_WIN32_FALSE = @X86_WIN32_FALSE@
|
||||||
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
X86_WIN32_TRUE = @X86_WIN32_TRUE@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||||
ac_ct_F77 = @ac_ct_F77@
|
ac_ct_STRIP = @ac_ct_STRIP@
|
||||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
|
||||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
|
|
@ -184,31 +172,24 @@ build_cpu = @build_cpu@
|
||||||
build_os = @build_os@
|
build_os = @build_os@
|
||||||
build_vendor = @build_vendor@
|
build_vendor = @build_vendor@
|
||||||
datadir = @datadir@
|
datadir = @datadir@
|
||||||
datarootdir = @datarootdir@
|
|
||||||
docdir = @docdir@
|
|
||||||
dvidir = @dvidir@
|
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
host = @host@
|
host = @host@
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_cpu = @host_cpu@
|
host_cpu = @host_cpu@
|
||||||
host_os = @host_os@
|
host_os = @host_os@
|
||||||
host_vendor = @host_vendor@
|
host_vendor = @host_vendor@
|
||||||
htmldir = @htmldir@
|
|
||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
install_sh = @install_sh@
|
install_sh = @install_sh@
|
||||||
libdir = @libdir@
|
libdir = @libdir@
|
||||||
libexecdir = @libexecdir@
|
libexecdir = @libexecdir@
|
||||||
localedir = @localedir@
|
|
||||||
localstatedir = @localstatedir@
|
localstatedir = @localstatedir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
mkdir_p = @mkdir_p@
|
mkdir_p = @mkdir_p@
|
||||||
multi_basedir = @multi_basedir@
|
multi_basedir = @multi_basedir@
|
||||||
oldincludedir = @oldincludedir@
|
oldincludedir = @oldincludedir@
|
||||||
pdfdir = @pdfdir@
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* Area: ffi_call, unwind info
|
||||||
|
Purpose: Check if the unwind information is passed correctly.
|
||||||
|
Limitations: none.
|
||||||
|
PR: none.
|
||||||
|
Originator: Andreas Tobler <andreast@gcc.gnu.org> 20061213 */
|
||||||
|
|
||||||
|
/* { dg-do run { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
|
||||||
|
#include "ffitestcxx.h"
|
||||||
|
|
||||||
|
static int checking(int a __UNUSED__, short b __UNUSED__,
|
||||||
|
signed char c __UNUSED__)
|
||||||
|
{
|
||||||
|
throw 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
ffi_cif cif;
|
||||||
|
ffi_type *args[MAX_ARGS];
|
||||||
|
void *values[MAX_ARGS];
|
||||||
|
ffi_arg rint;
|
||||||
|
|
||||||
|
signed int si;
|
||||||
|
signed short ss;
|
||||||
|
signed char sc;
|
||||||
|
|
||||||
|
args[0] = &ffi_type_sint;
|
||||||
|
values[0] = &si;
|
||||||
|
args[1] = &ffi_type_sshort;
|
||||||
|
values[1] = &ss;
|
||||||
|
args[2] = &ffi_type_schar;
|
||||||
|
values[2] = ≻
|
||||||
|
|
||||||
|
/* Initialize the cif */
|
||||||
|
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
|
||||||
|
&ffi_type_sint, args) == FFI_OK);
|
||||||
|
|
||||||
|
si = -6;
|
||||||
|
ss = -12;
|
||||||
|
sc = -1;
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ffi_call(&cif, FFI_FN(checking), &rint, values);
|
||||||
|
} catch (int exception_code)
|
||||||
|
{
|
||||||
|
CHECK(exception_code == 9);
|
||||||
|
}
|
||||||
|
printf("part one OK\n");
|
||||||
|
/* { dg-output "part one OK" } */
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue