Refresh from GCC
This commit is contained in:
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -211,7 +255,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -69,8 +69,10 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
|||||||
compile config.guess config.sub depcomp install-sh ltmain.sh \
|
compile config.guess config.sub depcomp install-sh ltmain.sh \
|
||||||
mdate-sh missing texinfo.tex
|
mdate-sh missing texinfo.tex
|
||||||
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)/m4/libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||||
|
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||||
|
$(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 \
|
||||||
|
|||||||
39
.pc/debug-build/configure
vendored
39
.pc/debug-build/configure
vendored
@@ -7816,6 +7816,10 @@ _lt_linker_boilerplate=`cat conftest.err`
|
|||||||
$RM -r conftest*
|
$RM -r conftest*
|
||||||
|
|
||||||
|
|
||||||
|
## CAVEAT EMPTOR:
|
||||||
|
## There is no encapsulation within the following macros, do not change
|
||||||
|
## the running order or otherwise move them around unless you know exactly
|
||||||
|
## what you are doing...
|
||||||
if test -n "$compiler"; then
|
if test -n "$compiler"; then
|
||||||
|
|
||||||
lt_prog_compiler_no_builtin_flag=
|
lt_prog_compiler_no_builtin_flag=
|
||||||
@@ -7841,11 +7845,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:7844: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:7848: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:7848: \$? = $ac_status" >&5
|
echo "$as_me:7852: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8180,11 +8184,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8183: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8187: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:8187: \$? = $ac_status" >&5
|
echo "$as_me:8191: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8285,11 +8289,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8288: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8292: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8292: \$? = $ac_status" >&5
|
echo "$as_me:8296: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -8340,11 +8344,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8343: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8347: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8347: \$? = $ac_status" >&5
|
echo "$as_me:8351: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -11143,7 +11147,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11146 "configure"
|
#line 11150 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -11239,7 +11243,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11242 "configure"
|
#line 11246 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -12188,8 +12192,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -14530,7 +14541,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".ascii \"string\"");
|
asm (".ascii \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
@@ -14592,7 +14603,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".string \"string\"");
|
asm (".string \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -86,8 +86,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -287,7 +294,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_ascii_pseudo_op, [
|
libffi_cv_as_ascii_pseudo_op, [
|
||||||
libffi_cv_as_ascii_pseudo_op=unknown
|
libffi_cv_as_ascii_pseudo_op=unknown
|
||||||
# Check if we have .ascii
|
# Check if we have .ascii
|
||||||
AC_TRY_COMPILE([asm (".ascii \"string\"");],,
|
AC_TRY_COMPILE([asm (".ascii \\"string\\"");],,
|
||||||
[libffi_cv_as_ascii_pseudo_op=yes],
|
[libffi_cv_as_ascii_pseudo_op=yes],
|
||||||
[libffi_cv_as_ascii_pseudo_op=no])
|
[libffi_cv_as_ascii_pseudo_op=no])
|
||||||
])
|
])
|
||||||
@@ -300,7 +307,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_string_pseudo_op, [
|
libffi_cv_as_string_pseudo_op, [
|
||||||
libffi_cv_as_string_pseudo_op=unknown
|
libffi_cv_as_string_pseudo_op=unknown
|
||||||
# Check if we have .string
|
# Check if we have .string
|
||||||
AC_TRY_COMPILE([asm (".string \"string\"");],,
|
AC_TRY_COMPILE([asm (".string \\"string\\"");],,
|
||||||
[libffi_cv_as_string_pseudo_op=yes],
|
[libffi_cv_as_string_pseudo_op=yes],
|
||||||
[libffi_cv_as_string_pseudo_op=no])
|
[libffi_cv_as_string_pseudo_op=no])
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -185,7 +229,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -207,7 +251,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -180,7 +224,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
15
.pc/stand-alone/configure
vendored
15
.pc/stand-alone/configure
vendored
@@ -11359,8 +11359,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -12423,7 +12430,7 @@ else
|
|||||||
# Check if we have .ascii
|
# Check if we have .ascii
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".ascii \"string\"");
|
asm (".ascii \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
@@ -12458,7 +12465,7 @@ else
|
|||||||
# Check if we have .string
|
# Check if we have .string
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".string \"string\"");
|
asm (".string \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -82,8 +82,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -282,7 +289,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_ascii_pseudo_op, [
|
libffi_cv_as_ascii_pseudo_op, [
|
||||||
libffi_cv_as_ascii_pseudo_op=unknown
|
libffi_cv_as_ascii_pseudo_op=unknown
|
||||||
# Check if we have .ascii
|
# Check if we have .ascii
|
||||||
AC_TRY_COMPILE([asm (".ascii \"string\"");],,
|
AC_TRY_COMPILE([asm (".ascii \\"string\\"");],,
|
||||||
[libffi_cv_as_ascii_pseudo_op=yes],
|
[libffi_cv_as_ascii_pseudo_op=yes],
|
||||||
[libffi_cv_as_ascii_pseudo_op=no])
|
[libffi_cv_as_ascii_pseudo_op=no])
|
||||||
])
|
])
|
||||||
@@ -295,7 +302,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_string_pseudo_op, [
|
libffi_cv_as_string_pseudo_op, [
|
||||||
libffi_cv_as_string_pseudo_op=unknown
|
libffi_cv_as_string_pseudo_op=unknown
|
||||||
# Check if we have .string
|
# Check if we have .string
|
||||||
AC_TRY_COMPILE([asm (".string \"string\"");],,
|
AC_TRY_COMPILE([asm (".string \\"string\\"");],,
|
||||||
[libffi_cv_as_string_pseudo_op=yes],
|
[libffi_cv_as_string_pseudo_op=yes],
|
||||||
[libffi_cv_as_string_pseudo_op=no])
|
[libffi_cv_as_string_pseudo_op=no])
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -199,7 +243,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Copyright (c) 2002 Ranjit Mathew
|
Copyright (c) 2002 Ranjit Mathew
|
||||||
Copyright (c) 2002 Bo Thorsen
|
Copyright (c) 2002 Bo Thorsen
|
||||||
Copyright (c) 2002 Roger Sayle
|
Copyright (c) 2002 Roger Sayle
|
||||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
Copyright (C) 2008, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
x86 Foreign Function Interface
|
x86 Foreign Function Interface
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -191,7 +235,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
This is doc/libffi.info, produced by makeinfo version 4.12 from
|
This is /home/green/libffi/doc/libffi.info, produced by makeinfo
|
||||||
./doc/libffi.texi.
|
version 4.13 from /home/green/libffi/doc/libffi.texi.
|
||||||
|
|
||||||
This manual is for Libffi, a portable foreign-function interface
|
This manual is for Libffi, a portable foreign-function interface
|
||||||
library.
|
library.
|
||||||
|
|
||||||
Copyright (C) 2008 Red Hat, Inc.
|
Copyright (C) 2008, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this
|
Permission is granted to copy, distribute and/or modify this
|
||||||
document under the terms of the GNU General Public License as
|
document under the terms of the GNU General Public License as
|
||||||
@@ -13,7 +13,7 @@ library.
|
|||||||
included in the section entitled "GNU General Public License".
|
included in the section entitled "GNU General Public License".
|
||||||
|
|
||||||
|
|
||||||
INFO-DIR-SECTION
|
INFO-DIR-SECTION Development
|
||||||
START-INFO-DIR-ENTRY
|
START-INFO-DIR-ENTRY
|
||||||
* libffi: (libffi). Portable foreign-function interface library.
|
* libffi: (libffi). Portable foreign-function interface library.
|
||||||
END-INFO-DIR-ENTRY
|
END-INFO-DIR-ENTRY
|
||||||
@@ -27,7 +27,7 @@ libffi
|
|||||||
This manual is for Libffi, a portable foreign-function interface
|
This manual is for Libffi, a portable foreign-function interface
|
||||||
library.
|
library.
|
||||||
|
|
||||||
Copyright (C) 2008 Red Hat, Inc.
|
Copyright (C) 2008, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this
|
Permission is granted to copy, distribute and/or modify this
|
||||||
document under the terms of the GNU General Public License as
|
document under the terms of the GNU General Public License as
|
||||||
@@ -89,6 +89,7 @@ File: libffi.info, Node: Using libffi, Next: Missing Features, Prev: Introduc
|
|||||||
* Types:: libffi type descriptions.
|
* Types:: libffi type descriptions.
|
||||||
* Multiple ABIs:: Different passing styles on one platform.
|
* Multiple ABIs:: Different passing styles on one platform.
|
||||||
* The Closure API:: Writing a generic function.
|
* The Closure API:: Writing a generic function.
|
||||||
|
* Closure Example:: A closure example.
|
||||||
|
|
||||||
|
|
||||||
File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi
|
File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi
|
||||||
@@ -368,7 +369,7 @@ instance, the x86 platform has both `stdcall' and `fastcall' functions.
|
|||||||
necessarily platform-specific.
|
necessarily platform-specific.
|
||||||
|
|
||||||
|
|
||||||
File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi
|
File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi
|
||||||
|
|
||||||
2.5 The Closure API
|
2.5 The Closure API
|
||||||
===================
|
===================
|
||||||
@@ -443,6 +444,62 @@ closure function:
|
|||||||
is deprecated, as it cannot handle the need for separate writable and
|
is deprecated, as it cannot handle the need for separate writable and
|
||||||
executable addresses.
|
executable addresses.
|
||||||
|
|
||||||
|
|
||||||
|
File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi
|
||||||
|
|
||||||
|
2.6 Closure Example
|
||||||
|
===================
|
||||||
|
|
||||||
|
A trivial example that creates a new `puts' by binding `fputs' with
|
||||||
|
`stdin'.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ffi.h>
|
||||||
|
|
||||||
|
/* Acts like puts with the file given at time of enclosure. */
|
||||||
|
void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
|
||||||
|
FILE *stream)
|
||||||
|
{
|
||||||
|
*ret = fputs(*(char **)args[0], stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
ffi_cif cif;
|
||||||
|
ffi_type *args[1];
|
||||||
|
ffi_closure *closure;
|
||||||
|
|
||||||
|
int (*bound_puts)(char *);
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
/* Allocate closure and bound_puts */
|
||||||
|
closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
|
||||||
|
|
||||||
|
if (closure)
|
||||||
|
{
|
||||||
|
/* Initialize the argument info vectors */
|
||||||
|
args[0] = &ffi_type_pointer;
|
||||||
|
|
||||||
|
/* Initialize the cif */
|
||||||
|
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
||||||
|
&ffi_type_uint, args) == FFI_OK)
|
||||||
|
{
|
||||||
|
/* Initialize the closure, setting stream to stdout */
|
||||||
|
if (ffi_prep_closure_loc(closure, &cif, puts_binding,
|
||||||
|
stdout, bound_puts) == FFI_OK)
|
||||||
|
{
|
||||||
|
rc = bound_puts("Hello World!");
|
||||||
|
/* rc now holds the result of the call to fputs */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Deallocate both closure, and bound_puts */
|
||||||
|
ffi_closure_free(closure);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top
|
File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top
|
||||||
|
|
||||||
@@ -480,7 +537,7 @@ Index
|
|||||||
* closures: The Closure API. (line 13)
|
* closures: The Closure API. (line 13)
|
||||||
* FFI: Introduction. (line 31)
|
* FFI: Introduction. (line 31)
|
||||||
* ffi_call: The Basics. (line 41)
|
* ffi_call: The Basics. (line 41)
|
||||||
* ffi_closure_alloca: The Closure API. (line 19)
|
* ffi_closure_alloc: The Closure API. (line 19)
|
||||||
* ffi_closure_free: The Closure API. (line 26)
|
* ffi_closure_free: The Closure API. (line 26)
|
||||||
* FFI_CLOSURES: The Closure API. (line 13)
|
* FFI_CLOSURES: The Closure API. (line 13)
|
||||||
* ffi_prep_cif: The Basics. (line 16)
|
* ffi_prep_cif: The Basics. (line 16)
|
||||||
@@ -516,18 +573,19 @@ Index
|
|||||||
|
|
||||||
|
|
||||||
Tag Table:
|
Tag Table:
|
||||||
Node: Top670
|
Node: Top724
|
||||||
Node: Introduction1406
|
Node: Introduction1466
|
||||||
Node: Using libffi3042
|
Node: Using libffi3102
|
||||||
Node: The Basics3477
|
Node: The Basics3588
|
||||||
Node: Simple Example6084
|
Node: Simple Example6195
|
||||||
Node: Types7111
|
Node: Types7222
|
||||||
Node: Primitive Types7394
|
Node: Primitive Types7505
|
||||||
Node: Structures9214
|
Node: Structures9325
|
||||||
Node: Type Example10074
|
Node: Type Example10185
|
||||||
Node: Multiple ABIs11297
|
Node: Multiple ABIs11408
|
||||||
Node: The Closure API11668
|
Node: The Closure API11779
|
||||||
Node: Missing Features14588
|
Node: Closure Example14723
|
||||||
Node: Index15081
|
Node: Missing Features16282
|
||||||
|
Node: Index16775
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Copyright (c) 2002 Ranjit Mathew
|
Copyright (c) 2002 Ranjit Mathew
|
||||||
Copyright (c) 2002 Bo Thorsen
|
Copyright (c) 2002 Bo Thorsen
|
||||||
Copyright (c) 2002 Roger Sayle
|
Copyright (c) 2002 Roger Sayle
|
||||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
Copyright (C) 2008, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
x86 Foreign Function Interface
|
x86 Foreign Function Interface
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-11-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* testsuite/lib/libffi-dg.exp: Rename ...
|
* testsuite/lib/libffi-dg.exp: Rename ...
|
||||||
@@ -218,7 +262,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
7954
.pc/win64-underscore/aclocal.m4
vendored
7954
.pc/win64-underscore/aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
39
.pc/win64-underscore/configure
vendored
39
.pc/win64-underscore/configure
vendored
@@ -7822,6 +7822,10 @@ _lt_linker_boilerplate=`cat conftest.err`
|
|||||||
$RM -r conftest*
|
$RM -r conftest*
|
||||||
|
|
||||||
|
|
||||||
|
## CAVEAT EMPTOR:
|
||||||
|
## There is no encapsulation within the following macros, do not change
|
||||||
|
## the running order or otherwise move them around unless you know exactly
|
||||||
|
## what you are doing...
|
||||||
if test -n "$compiler"; then
|
if test -n "$compiler"; then
|
||||||
|
|
||||||
lt_prog_compiler_no_builtin_flag=
|
lt_prog_compiler_no_builtin_flag=
|
||||||
@@ -7847,11 +7851,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:7850: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:7854: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:7854: \$? = $ac_status" >&5
|
echo "$as_me:7858: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8186,11 +8190,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8189: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8193: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:8193: \$? = $ac_status" >&5
|
echo "$as_me:8197: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8291,11 +8295,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8294: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8298: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8298: \$? = $ac_status" >&5
|
echo "$as_me:8302: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -8346,11 +8350,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8349: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8353: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8353: \$? = $ac_status" >&5
|
echo "$as_me:8357: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -11149,7 +11153,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11152 "configure"
|
#line 11156 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -11245,7 +11249,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11248 "configure"
|
#line 11252 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -12194,8 +12198,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -14536,7 +14547,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".ascii \"string\"");
|
asm (".ascii \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
@@ -14598,7 +14609,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".string \"string\"");
|
asm (".string \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -90,8 +90,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -291,7 +298,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_ascii_pseudo_op, [
|
libffi_cv_as_ascii_pseudo_op, [
|
||||||
libffi_cv_as_ascii_pseudo_op=unknown
|
libffi_cv_as_ascii_pseudo_op=unknown
|
||||||
# Check if we have .ascii
|
# Check if we have .ascii
|
||||||
AC_TRY_COMPILE([asm (".ascii \"string\"");],,
|
AC_TRY_COMPILE([asm (".ascii \\"string\\"");],,
|
||||||
[libffi_cv_as_ascii_pseudo_op=yes],
|
[libffi_cv_as_ascii_pseudo_op=yes],
|
||||||
[libffi_cv_as_ascii_pseudo_op=no])
|
[libffi_cv_as_ascii_pseudo_op=no])
|
||||||
])
|
])
|
||||||
@@ -304,7 +311,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_string_pseudo_op, [
|
libffi_cv_as_string_pseudo_op, [
|
||||||
libffi_cv_as_string_pseudo_op=unknown
|
libffi_cv_as_string_pseudo_op=unknown
|
||||||
# Check if we have .string
|
# Check if we have .string
|
||||||
AC_TRY_COMPILE([asm (".string \"string\"");],,
|
AC_TRY_COMPILE([asm (".string \\"string\\"");],,
|
||||||
[libffi_cv_as_string_pseudo_op=yes],
|
[libffi_cv_as_string_pseudo_op=yes],
|
||||||
[libffi_cv_as_string_pseudo_op=no])
|
[libffi_cv_as_string_pseudo_op=no])
|
||||||
])
|
])
|
||||||
|
|||||||
46
ChangeLog
46
ChangeLog
@@ -1,3 +1,47 @@
|
|||||||
|
2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
|
PR target/40125
|
||||||
|
* configure.ac (AM_LTLDFLAGS): Add -bindir option for windows DLLs.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR libffi/29152
|
||||||
|
PR libffi/42378
|
||||||
|
* src/powerpc/darwin_closure.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffitarget.h (POWERPC_DARWIN64): New,
|
||||||
|
(FFI_TRAMPOLINE_SIZE): Update for Darwin64.
|
||||||
|
* src/powerpc/darwin.S: Provide Darwin64 implementation,
|
||||||
|
update comments.
|
||||||
|
* src/powerpc/ffi_darwin.c: Likewise.
|
||||||
|
|
||||||
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* configure.ac (libffi_cv_as_ascii_pseudo_op): Use double
|
||||||
|
backslashes.
|
||||||
|
(libffi_cv_as_string_pseudo_op): Likewise.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
2010-12-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
* src/arm/sysv.S (ffi_closure_SYSV): Add UNWIND to .pad directive.
|
||||||
|
(ffi_closure_VFP): Same.
|
||||||
|
(ffi_call_VFP): Move down to before ffi_closure_VFP. Add '.fpu vfp'
|
||||||
|
directive.
|
||||||
|
|
||||||
|
2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* testsuite/libffi.call/ffitest.h [__sgi] (PRId64, PRIu64): Define.
|
||||||
|
(PRIuPTR): Define.
|
||||||
|
|
||||||
|
2010-11-29 Richard Henderson <rth@redhat.com>
|
||||||
|
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* src/x86/sysv.S (FDE_ENCODING, FDE_ENCODE): Define.
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
2010-11-22 Jacek Caban <jacek@codeweavers.com>
|
2010-11-22 Jacek Caban <jacek@codeweavers.com>
|
||||||
|
|
||||||
* configure.ac: Check for symbol underscores on mingw-w64.
|
* configure.ac: Check for symbol underscores on mingw-w64.
|
||||||
@@ -225,7 +269,7 @@
|
|||||||
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
2010-01-15 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||||
|
|
||||||
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
* src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for
|
||||||
Sun Studio compiler compatibility.
|
Sun Studio compiler compatibility.
|
||||||
|
|
||||||
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
2010-01-12 Conrad Irwin <conrad.irwin@gmail.com>
|
||||||
|
|
||||||
|
|||||||
@@ -74,8 +74,10 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
|||||||
compile config.guess config.sub depcomp install-sh ltmain.sh \
|
compile config.guess config.sub depcomp install-sh ltmain.sh \
|
||||||
mdate-sh missing texinfo.tex
|
mdate-sh missing texinfo.tex
|
||||||
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)/m4/libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||||
|
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||||
|
$(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 \
|
||||||
|
|||||||
7954
aclocal.m4
vendored
7954
aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
39
configure
vendored
39
configure
vendored
@@ -7823,6 +7823,10 @@ _lt_linker_boilerplate=`cat conftest.err`
|
|||||||
$RM -r conftest*
|
$RM -r conftest*
|
||||||
|
|
||||||
|
|
||||||
|
## CAVEAT EMPTOR:
|
||||||
|
## There is no encapsulation within the following macros, do not change
|
||||||
|
## the running order or otherwise move them around unless you know exactly
|
||||||
|
## what you are doing...
|
||||||
if test -n "$compiler"; then
|
if test -n "$compiler"; then
|
||||||
|
|
||||||
lt_prog_compiler_no_builtin_flag=
|
lt_prog_compiler_no_builtin_flag=
|
||||||
@@ -7848,11 +7852,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:7851: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:7855: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:7855: \$? = $ac_status" >&5
|
echo "$as_me:7859: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8187,11 +8191,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8190: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8194: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:8194: \$? = $ac_status" >&5
|
echo "$as_me:8198: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8292,11 +8296,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8295: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8299: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8299: \$? = $ac_status" >&5
|
echo "$as_me:8303: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -8347,11 +8351,11 @@ else
|
|||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8350: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8354: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8354: \$? = $ac_status" >&5
|
echo "$as_me:8358: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -11150,7 +11154,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11153 "configure"
|
#line 11157 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -11246,7 +11250,7 @@ else
|
|||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11249 "configure"
|
#line 11253 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -12195,8 +12199,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -14537,7 +14548,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".ascii \"string\"");
|
asm (".ascii \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
@@ -14599,7 +14610,7 @@ _ACEOF
|
|||||||
cat confdefs.h >>conftest.$ac_ext
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
cat >>conftest.$ac_ext <<_ACEOF
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
asm (".string \"string\"");
|
asm (".string \\"string\\"");
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
|
|||||||
15
configure.ac
15
configure.ac
@@ -90,8 +90,15 @@ case "$host" in
|
|||||||
;;
|
;;
|
||||||
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2*)
|
||||||
TARGET=X86_WIN32; TARGETDIR=x86
|
TARGET=X86_WIN32; TARGETDIR=x86
|
||||||
# All mingw/cygwin/win32 builds require this for sharedlib
|
# All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
|
||||||
AM_LTLDFLAGS="-no-undefined"
|
# We must also check with_cross_host to decide if this is a native
|
||||||
|
# or cross-build and select where to install dlls appropriately.
|
||||||
|
if test -n "$with_cross_host" &&
|
||||||
|
test x"$with_cross_host" != x"no"; then
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
|
||||||
|
else
|
||||||
|
AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
i?86-*-darwin*)
|
i?86-*-darwin*)
|
||||||
TARGET=X86_DARWIN; TARGETDIR=x86
|
TARGET=X86_DARWIN; TARGETDIR=x86
|
||||||
@@ -291,7 +298,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_ascii_pseudo_op, [
|
libffi_cv_as_ascii_pseudo_op, [
|
||||||
libffi_cv_as_ascii_pseudo_op=unknown
|
libffi_cv_as_ascii_pseudo_op=unknown
|
||||||
# Check if we have .ascii
|
# Check if we have .ascii
|
||||||
AC_TRY_COMPILE([asm (".ascii \"string\"");],,
|
AC_TRY_COMPILE([asm (".ascii \\"string\\"");],,
|
||||||
[libffi_cv_as_ascii_pseudo_op=yes],
|
[libffi_cv_as_ascii_pseudo_op=yes],
|
||||||
[libffi_cv_as_ascii_pseudo_op=no])
|
[libffi_cv_as_ascii_pseudo_op=no])
|
||||||
])
|
])
|
||||||
@@ -304,7 +311,7 @@ if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64
|
|||||||
libffi_cv_as_string_pseudo_op, [
|
libffi_cv_as_string_pseudo_op, [
|
||||||
libffi_cv_as_string_pseudo_op=unknown
|
libffi_cv_as_string_pseudo_op=unknown
|
||||||
# Check if we have .string
|
# Check if we have .string
|
||||||
AC_TRY_COMPILE([asm (".string \"string\"");],,
|
AC_TRY_COMPILE([asm (".string \\"string\\"");],,
|
||||||
[libffi_cv_as_string_pseudo_op=yes],
|
[libffi_cv_as_string_pseudo_op=yes],
|
||||||
[libffi_cv_as_string_pseudo_op=no])
|
[libffi_cv_as_string_pseudo_op=no])
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
This is ../libffi/doc/libffi.info, produced by makeinfo version 4.13
|
This is /home/green/libffi/doc/libffi.info, produced by makeinfo
|
||||||
from ../libffi/doc/libffi.texi.
|
version 4.13 from /home/green/libffi/doc/libffi.texi.
|
||||||
|
|
||||||
This manual is for Libffi, a portable foreign-function interface
|
This manual is for Libffi, a portable foreign-function interface
|
||||||
library.
|
library.
|
||||||
@@ -575,19 +575,19 @@ Index
|
|||||||
|
|
||||||
|
|
||||||
Tag Table:
|
Tag Table:
|
||||||
Node: Top706
|
Node: Top724
|
||||||
Node: Introduction1448
|
Node: Introduction1466
|
||||||
Node: Using libffi3084
|
Node: Using libffi3102
|
||||||
Node: The Basics3570
|
Node: The Basics3588
|
||||||
Node: Simple Example6356
|
Node: Simple Example6374
|
||||||
Node: Types7383
|
Node: Types7401
|
||||||
Node: Primitive Types7666
|
Node: Primitive Types7684
|
||||||
Node: Structures9486
|
Node: Structures9504
|
||||||
Node: Type Example10346
|
Node: Type Example10364
|
||||||
Node: Multiple ABIs11569
|
Node: Multiple ABIs11587
|
||||||
Node: The Closure API11940
|
Node: The Closure API11958
|
||||||
Node: Closure Example14884
|
Node: Closure Example14902
|
||||||
Node: Missing Features16443
|
Node: Missing Features16461
|
||||||
Node: Index16936
|
Node: Index16954
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@@ -134,9 +134,6 @@
|
|||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#undef PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
@@ -157,6 +154,9 @@
|
|||||||
/* Define to 1 if you have the ANSI C header files. */
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
#undef STDC_HEADERS
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Define if symbols are underscored. */
|
||||||
|
#undef SYMBOL_UNDERSCORE
|
||||||
|
|
||||||
/* Define this if you are using Purify and want to suppress spurious messages.
|
/* Define this if you are using Purify and want to suppress spurious messages.
|
||||||
*/
|
*/
|
||||||
#undef USING_PURIFY
|
#undef USING_PURIFY
|
||||||
|
|||||||
@@ -39,8 +39,10 @@ subdir = include
|
|||||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||||
$(srcdir)/ffi.h.in
|
$(srcdir)/ffi.h.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)/m4/libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||||
|
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||||
|
$(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 = $(install_sh) -d
|
mkinstalldirs = $(install_sh) -d
|
||||||
@@ -190,6 +192,7 @@ psdir = @psdir@
|
|||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
sys_symbol_underscore = @sys_symbol_underscore@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
target = @target@
|
target = @target@
|
||||||
target_alias = @target_alias@
|
target_alias = @target_alias@
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ target_triplet = @target@
|
|||||||
subdir = man
|
subdir = man
|
||||||
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)/m4/libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||||
|
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||||
|
$(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 = $(install_sh) -d
|
mkinstalldirs = $(install_sh) -d
|
||||||
@@ -188,6 +190,7 @@ psdir = @psdir@
|
|||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
sys_symbol_underscore = @sys_symbol_underscore@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
target = @target@
|
target = @target@
|
||||||
target_alias = @target_alias@
|
target_alias = @target_alias@
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -65,6 +65,13 @@
|
@@ -109,6 +109,13 @@
|
||||||
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
||||||
* testsuite/libffi.call/huge_struct.c: Likewise.
|
* testsuite/libffi.call/huge_struct.c: Likewise.
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ Index: libffi/configure.ac
|
|||||||
m4_undefine([_AC_ARG_VAR_PRECIOUS])
|
m4_undefine([_AC_ARG_VAR_PRECIOUS])
|
||||||
m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
|
||||||
|
|
||||||
@@ -399,6 +403,7 @@ AC_ARG_ENABLE(debug,
|
@@ -406,6 +410,7 @@ AC_ARG_ENABLE(debug,
|
||||||
if test "$enable_debug" = "yes"; then
|
if test "$enable_debug" = "yes"; then
|
||||||
AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
|
AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.])
|
||||||
fi)
|
fi)
|
||||||
@@ -78,7 +78,7 @@ Index: libffi/Makefile.in
|
|||||||
subdir = .
|
subdir = .
|
||||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||||
$(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \
|
$(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \
|
||||||
@@ -481,7 +486,7 @@ nodist_libffi_la_SOURCES = $(am__append_
|
@@ -483,7 +488,7 @@ nodist_libffi_la_SOURCES = $(am__append_
|
||||||
$(am__append_24) $(am__append_25)
|
$(am__append_24) $(am__append_25)
|
||||||
libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
|
libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
|
||||||
nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
|
nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
|
||||||
@@ -147,81 +147,81 @@ Index: libffi/configure
|
|||||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
(eval $ac_compile) 2>&5
|
(eval $ac_compile) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
@@ -7841,11 +7847,11 @@ else
|
@@ -7845,11 +7851,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:7844: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:7848: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:7850: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:7854: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
- echo "$as_me:7848: \$? = $ac_status" >&5
|
- echo "$as_me:7852: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:7854: \$? = $ac_status" >&5
|
+ echo "$as_me:7858: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8180,11 +8186,11 @@ else
|
@@ -8184,11 +8190,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8183: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8187: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8189: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8193: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
- echo "$as_me:8187: \$? = $ac_status" >&5
|
- echo "$as_me:8191: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8193: \$? = $ac_status" >&5
|
+ echo "$as_me:8197: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8285,11 +8291,11 @@ else
|
@@ -8289,11 +8295,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8288: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8292: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8294: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8298: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
- echo "$as_me:8292: \$? = $ac_status" >&5
|
- echo "$as_me:8296: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8298: \$? = $ac_status" >&5
|
+ echo "$as_me:8302: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -8340,11 +8346,11 @@ else
|
@@ -8344,11 +8350,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8343: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8347: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8349: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8353: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
- echo "$as_me:8347: \$? = $ac_status" >&5
|
- echo "$as_me:8351: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8353: \$? = $ac_status" >&5
|
+ echo "$as_me:8357: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -11143,7 +11149,7 @@ else
|
@@ -11147,7 +11153,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 11146 "configure"
|
-#line 11150 "configure"
|
||||||
+#line 11152 "configure"
|
+#line 11156 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -11239,7 +11245,7 @@ else
|
@@ -11243,7 +11249,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 11242 "configure"
|
-#line 11246 "configure"
|
||||||
+#line 11248 "configure"
|
+#line 11252 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -14766,6 +14772,14 @@ _ACEOF
|
@@ -14777,6 +14783,14 @@ _ACEOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ Index: libffi/configure
|
|||||||
|
|
||||||
# Check whether --enable-structs was given.
|
# Check whether --enable-structs was given.
|
||||||
if test "${enable_structs+set}" = set; then
|
if test "${enable_structs+set}" = set; then
|
||||||
@@ -15166,6 +15180,13 @@ Usually this means the macro was only in
|
@@ -15177,6 +15191,13 @@ Usually this means the macro was only in
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -65,6 +65,12 @@
|
@@ -109,6 +109,12 @@
|
||||||
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
||||||
* testsuite/libffi.call/huge_struct.c: Likewise.
|
* testsuite/libffi.call/huge_struct.c: Likewise.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -73,6 +73,10 @@
|
@@ -117,6 +117,10 @@
|
||||||
* src/prep_cif.c: Push stack space computation into src/x86/ffi.c
|
* src/prep_cif.c: Push stack space computation into src/x86/ffi.c
|
||||||
for X86_ANY so return value space doesn't get added twice.
|
for X86_ANY so return value space doesn't get added twice.
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -131,6 +131,11 @@
|
@@ -175,6 +175,11 @@
|
||||||
* man/Makefile.in: Regenerate.
|
* man/Makefile.in: Regenerate.
|
||||||
* testsuite/Makefile.in: Regenerate.
|
* testsuite/Makefile.in: Regenerate.
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -65,6 +65,14 @@
|
@@ -109,6 +109,14 @@
|
||||||
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
* testsuite/libffi.call/cls_longdouble.c: Likewise.
|
||||||
* testsuite/libffi.call/huge_struct.c: Likewise.
|
* testsuite/libffi.call/huge_struct.c: Likewise.
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -102,6 +102,14 @@
|
@@ -146,6 +146,14 @@
|
||||||
* fficonfig.h.in: Regenerate.
|
* fficonfig.h.in: Regenerate.
|
||||||
* src/x86/sysv.S (.eh_frame): Use .ascii, .string or error.
|
* src/x86/sysv.S (.eh_frame): Use .ascii, .string or error.
|
||||||
|
|
||||||
@@ -70,47 +70,7 @@ Index: libffi/doc/libffi.info
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/doc/libffi.info
|
--- libffi.orig/doc/libffi.info
|
||||||
+++ libffi/doc/libffi.info
|
+++ libffi/doc/libffi.info
|
||||||
@@ -1,10 +1,10 @@
|
@@ -147,7 +147,9 @@ To prepare a call interface object, use
|
||||||
-This is doc/libffi.info, produced by makeinfo version 4.12 from
|
|
||||||
-./doc/libffi.texi.
|
|
||||||
+This is ../libffi/doc/libffi.info, produced by makeinfo version 4.13
|
|
||||||
+from ../libffi/doc/libffi.texi.
|
|
||||||
|
|
||||||
This manual is for Libffi, a portable foreign-function interface
|
|
||||||
library.
|
|
||||||
|
|
||||||
- Copyright (C) 2008 Red Hat, Inc.
|
|
||||||
+ Copyright (C) 2008, 2010 Red Hat, Inc.
|
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this
|
|
||||||
document under the terms of the GNU General Public License as
|
|
||||||
@@ -13,7 +13,7 @@ library.
|
|
||||||
included in the section entitled "GNU General Public License".
|
|
||||||
|
|
||||||
|
|
||||||
-INFO-DIR-SECTION
|
|
||||||
+INFO-DIR-SECTION Development
|
|
||||||
START-INFO-DIR-ENTRY
|
|
||||||
* libffi: (libffi). Portable foreign-function interface library.
|
|
||||||
END-INFO-DIR-ENTRY
|
|
||||||
@@ -27,7 +27,7 @@ libffi
|
|
||||||
This manual is for Libffi, a portable foreign-function interface
|
|
||||||
library.
|
|
||||||
|
|
||||||
- Copyright (C) 2008 Red Hat, Inc.
|
|
||||||
+ Copyright (C) 2008, 2010 Red Hat, Inc.
|
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this
|
|
||||||
document under the terms of the GNU General Public License as
|
|
||||||
@@ -89,6 +89,7 @@ File: libffi.info, Node: Using libffi,
|
|
||||||
* Types:: libffi type descriptions.
|
|
||||||
* Multiple ABIs:: Different passing styles on one platform.
|
|
||||||
* The Closure API:: Writing a generic function.
|
|
||||||
+* Closure Example:: A closure example.
|
|
||||||
|
|
||||||
|
|
||||||
File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi
|
|
||||||
@@ -146,7 +147,9 @@ To prepare a call interface object, use
|
|
||||||
AVALUES is a vector of `void *' pointers that point to the memory
|
AVALUES is a vector of `void *' pointers that point to the memory
|
||||||
locations holding the argument values for a call. If CIF declares
|
locations holding the argument values for a call. If CIF declares
|
||||||
that the function has no arguments (i.e., NARGS was 0), then
|
that the function has no arguments (i.e., NARGS was 0), then
|
||||||
@@ -121,117 +81,29 @@ Index: libffi/doc/libffi.info
|
|||||||
|
|
||||||
|
|
||||||
File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi
|
File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi
|
||||||
@@ -368,7 +371,7 @@ instance, the x86 platform has both `std
|
@@ -577,15 +579,15 @@ Node: Top724
|
||||||
necessarily platform-specific.
|
Node: Introduction1466
|
||||||
|
Node: Using libffi3102
|
||||||
|
Node: The Basics3588
|
||||||
-File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi
|
-Node: Simple Example6195
|
||||||
+File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi
|
-Node: Types7222
|
||||||
|
-Node: Primitive Types7505
|
||||||
2.5 The Closure API
|
-Node: Structures9325
|
||||||
===================
|
-Node: Type Example10185
|
||||||
@@ -444,6 +447,62 @@ is deprecated, as it cannot handle the n
|
-Node: Multiple ABIs11408
|
||||||
executable addresses.
|
-Node: The Closure API11779
|
||||||
|
-Node: Closure Example14723
|
||||||
|
-Node: Missing Features16282
|
||||||
+File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi
|
-Node: Index16775
|
||||||
+
|
+Node: Simple Example6374
|
||||||
+2.6 Closure Example
|
+Node: Types7401
|
||||||
+===================
|
+Node: Primitive Types7684
|
||||||
+
|
+Node: Structures9504
|
||||||
+A trivial example that creates a new `puts' by binding `fputs' with
|
+Node: Type Example10364
|
||||||
+`stdin'.
|
+Node: Multiple ABIs11587
|
||||||
+
|
+Node: The Closure API11958
|
||||||
+ #include <stdio.h>
|
+Node: Closure Example14902
|
||||||
+ #include <ffi.h>
|
+Node: Missing Features16461
|
||||||
+
|
+Node: Index16954
|
||||||
+ /* Acts like puts with the file given at time of enclosure. */
|
|
||||||
+ void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
|
|
||||||
+ FILE *stream)
|
|
||||||
+ {
|
|
||||||
+ *ret = fputs(*(char **)args[0], stream);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ int main()
|
|
||||||
+ {
|
|
||||||
+ ffi_cif cif;
|
|
||||||
+ ffi_type *args[1];
|
|
||||||
+ ffi_closure *closure;
|
|
||||||
+
|
|
||||||
+ int (*bound_puts)(char *);
|
|
||||||
+ int rc;
|
|
||||||
+
|
|
||||||
+ /* Allocate closure and bound_puts */
|
|
||||||
+ closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
|
|
||||||
+
|
|
||||||
+ if (closure)
|
|
||||||
+ {
|
|
||||||
+ /* Initialize the argument info vectors */
|
|
||||||
+ args[0] = &ffi_type_pointer;
|
|
||||||
+
|
|
||||||
+ /* Initialize the cif */
|
|
||||||
+ if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
|
||||||
+ &ffi_type_uint, args) == FFI_OK)
|
|
||||||
+ {
|
|
||||||
+ /* Initialize the closure, setting stream to stdout */
|
|
||||||
+ if (ffi_prep_closure_loc(closure, &cif, puts_binding,
|
|
||||||
+ stdout, bound_puts) == FFI_OK)
|
|
||||||
+ {
|
|
||||||
+ rc = bound_puts("Hello World!");
|
|
||||||
+ /* rc now holds the result of the call to fputs */
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Deallocate both closure, and bound_puts */
|
|
||||||
+ ffi_closure_free(closure);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top
|
|
||||||
|
|
||||||
3 Missing Features
|
|
||||||
@@ -480,7 +539,7 @@ Index
|
|
||||||
* closures: The Closure API. (line 13)
|
|
||||||
* FFI: Introduction. (line 31)
|
|
||||||
* ffi_call: The Basics. (line 41)
|
|
||||||
-* ffi_closure_alloca: The Closure API. (line 19)
|
|
||||||
+* ffi_closure_alloc: The Closure API. (line 19)
|
|
||||||
* ffi_closure_free: The Closure API. (line 26)
|
|
||||||
* FFI_CLOSURES: The Closure API. (line 13)
|
|
||||||
* ffi_prep_cif: The Basics. (line 16)
|
|
||||||
@@ -516,18 +575,19 @@ Index
|
|
||||||
|
|
||||||
|
|
||||||
Tag Table:
|
|
||||||
-Node: Top670
|
|
||||||
-Node: Introduction1406
|
|
||||||
-Node: Using libffi3042
|
|
||||||
-Node: The Basics3477
|
|
||||||
-Node: Simple Example6084
|
|
||||||
-Node: Types7111
|
|
||||||
-Node: Primitive Types7394
|
|
||||||
-Node: Structures9214
|
|
||||||
-Node: Type Example10074
|
|
||||||
-Node: Multiple ABIs11297
|
|
||||||
-Node: The Closure API11668
|
|
||||||
-Node: Missing Features14588
|
|
||||||
-Node: Index15081
|
|
||||||
+Node: Top706
|
|
||||||
+Node: Introduction1448
|
|
||||||
+Node: Using libffi3084
|
|
||||||
+Node: The Basics3570
|
|
||||||
+Node: Simple Example6356
|
|
||||||
+Node: Types7383
|
|
||||||
+Node: Primitive Types7666
|
|
||||||
+Node: Structures9486
|
|
||||||
+Node: Type Example10346
|
|
||||||
+Node: Multiple ABIs11569
|
|
||||||
+Node: The Closure API11940
|
|
||||||
+Node: Closure Example14884
|
|
||||||
+Node: Missing Features16443
|
|
||||||
+Node: Index16936
|
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ Index: libffi/ChangeLog
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog
|
--- libffi.orig/ChangeLog
|
||||||
+++ libffi/ChangeLog
|
+++ libffi/ChangeLog
|
||||||
@@ -1,3 +1,10 @@
|
@@ -42,6 +42,13 @@
|
||||||
|
(.eh_frame): Use FDE_ENCODING.
|
||||||
|
(.LASFDE1, .LASFDE2, LASFDE3): Simplify with FDE_ENCODE.
|
||||||
|
|
||||||
+2010-11-22 Jacek Caban <jacek@codeweavers.com>
|
+2010-11-22 Jacek Caban <jacek@codeweavers.com>
|
||||||
+
|
+
|
||||||
+ * configure.ac: Check for symbol underscores on mingw-w64.
|
+ * configure.ac: Check for symbol underscores on mingw-w64.
|
||||||
@@ -17,7 +20,7 @@ Index: libffi/configure.ac
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/configure.ac
|
--- libffi.orig/configure.ac
|
||||||
+++ libffi/configure.ac
|
+++ libffi/configure.ac
|
||||||
@@ -314,6 +314,13 @@ if test x$TARGET = xX86 || test x$TARGET
|
@@ -321,6 +321,13 @@ if test x$TARGET = xX86 || test x$TARGET
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -91,9 +94,9 @@ Index: libffi/aclocal.m4
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/aclocal.m4
|
--- libffi.orig/aclocal.m4
|
||||||
+++ libffi/aclocal.m4
|
+++ libffi/aclocal.m4
|
||||||
@@ -7364,6 +7364,811 @@ _LT_EOF
|
@@ -19,6 +19,811 @@ You have another version of autoconf. I
|
||||||
esac
|
If you have problems, you may need to regenerate the build system entirely.
|
||||||
])
|
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||||
|
|
||||||
+# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
|
+# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
|
||||||
+#
|
+#
|
||||||
@@ -900,9 +903,9 @@ Index: libffi/aclocal.m4
|
|||||||
+dnl aclocal-1.4 backwards compatibility:
|
+dnl aclocal-1.4 backwards compatibility:
|
||||||
+dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
|
+dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
|
||||||
+
|
+
|
||||||
# Helper functions for option handling. -*- Autoconf -*-
|
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
|
# This file is free software; the Free Software Foundation
|
||||||
Index: libffi/configure
|
Index: libffi/configure
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/configure
|
--- libffi.orig/configure
|
||||||
@@ -941,81 +944,81 @@ Index: libffi/configure
|
|||||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
(eval $ac_compile) 2>&5
|
(eval $ac_compile) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
@@ -7847,11 +7848,11 @@ else
|
@@ -7851,11 +7852,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:7850: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:7854: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:7851: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:7855: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
- echo "$as_me:7854: \$? = $ac_status" >&5
|
- echo "$as_me:7858: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:7855: \$? = $ac_status" >&5
|
+ echo "$as_me:7859: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8186,11 +8187,11 @@ else
|
@@ -8190,11 +8191,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8189: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8193: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8190: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8194: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
- echo "$as_me:8193: \$? = $ac_status" >&5
|
- echo "$as_me:8197: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8194: \$? = $ac_status" >&5
|
+ echo "$as_me:8198: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
@@ -8291,11 +8292,11 @@ else
|
@@ -8295,11 +8296,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8294: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8298: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8295: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8299: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
- echo "$as_me:8298: \$? = $ac_status" >&5
|
- echo "$as_me:8302: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8299: \$? = $ac_status" >&5
|
+ echo "$as_me:8303: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -8346,11 +8347,11 @@ else
|
@@ -8350,11 +8351,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
- (eval echo "\"\$as_me:8349: $lt_compile\"" >&5)
|
- (eval echo "\"\$as_me:8353: $lt_compile\"" >&5)
|
||||||
+ (eval echo "\"\$as_me:8350: $lt_compile\"" >&5)
|
+ (eval echo "\"\$as_me:8354: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
- echo "$as_me:8353: \$? = $ac_status" >&5
|
- echo "$as_me:8357: \$? = $ac_status" >&5
|
||||||
+ echo "$as_me:8354: \$? = $ac_status" >&5
|
+ echo "$as_me:8358: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
@@ -11149,7 +11150,7 @@ else
|
@@ -11153,7 +11154,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 11152 "configure"
|
-#line 11156 "configure"
|
||||||
+#line 11153 "configure"
|
+#line 11157 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -11245,7 +11246,7 @@ else
|
@@ -11249,7 +11250,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
-#line 11248 "configure"
|
-#line 11252 "configure"
|
||||||
+#line 11249 "configure"
|
+#line 11253 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
@@ -14647,6 +14648,63 @@ _ACEOF
|
@@ -14658,6 +14659,63 @@ _ACEOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
152
src/arm/sysv.S
152
src/arm/sysv.S
@@ -229,6 +229,83 @@ LSYM(Lepilogue):
|
|||||||
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
|
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
unsigned int FFI_HIDDEN
|
||||||
|
ffi_closure_SYSV_inner (closure, respp, args)
|
||||||
|
ffi_closure *closure;
|
||||||
|
void **respp;
|
||||||
|
void *args;
|
||||||
|
*/
|
||||||
|
|
||||||
|
ARM_FUNC_START ffi_closure_SYSV
|
||||||
|
UNWIND .pad #16
|
||||||
|
add ip, sp, #16
|
||||||
|
stmfd sp!, {ip, lr}
|
||||||
|
UNWIND .save {r0, lr}
|
||||||
|
add r2, sp, #8
|
||||||
|
UNWIND .pad #16
|
||||||
|
sub sp, sp, #16
|
||||||
|
str sp, [sp, #8]
|
||||||
|
add r1, sp, #8
|
||||||
|
bl ffi_closure_SYSV_inner
|
||||||
|
cmp r0, #FFI_TYPE_INT
|
||||||
|
beq .Lretint
|
||||||
|
|
||||||
|
cmp r0, #FFI_TYPE_FLOAT
|
||||||
|
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
||||||
|
beq .Lretint
|
||||||
|
#else
|
||||||
|
beq .Lretfloat
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cmp r0, #FFI_TYPE_DOUBLE
|
||||||
|
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
||||||
|
beq .Lretlonglong
|
||||||
|
#else
|
||||||
|
beq .Lretdouble
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cmp r0, #FFI_TYPE_LONGDOUBLE
|
||||||
|
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
||||||
|
beq .Lretlonglong
|
||||||
|
#else
|
||||||
|
beq .Lretlongdouble
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cmp r0, #FFI_TYPE_SINT64
|
||||||
|
beq .Lretlonglong
|
||||||
|
.Lclosure_epilogue:
|
||||||
|
add sp, sp, #16
|
||||||
|
ldmfd sp, {sp, pc}
|
||||||
|
.Lretint:
|
||||||
|
ldr r0, [sp]
|
||||||
|
b .Lclosure_epilogue
|
||||||
|
.Lretlonglong:
|
||||||
|
ldr r0, [sp]
|
||||||
|
ldr r1, [sp, #4]
|
||||||
|
b .Lclosure_epilogue
|
||||||
|
|
||||||
|
#if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
|
||||||
|
.Lretfloat:
|
||||||
|
ldfs f0, [sp]
|
||||||
|
b .Lclosure_epilogue
|
||||||
|
.Lretdouble:
|
||||||
|
ldfd f0, [sp]
|
||||||
|
b .Lclosure_epilogue
|
||||||
|
.Lretlongdouble:
|
||||||
|
ldfd f0, [sp]
|
||||||
|
b .Lclosure_epilogue
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.ffi_closure_SYSV_end:
|
||||||
|
UNWIND .fnend
|
||||||
|
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
|
||||||
|
|
||||||
|
|
||||||
|
/* Below are VFP hard-float ABI call and closure implementations.
|
||||||
|
Add VFP FPU directive here. */
|
||||||
|
.fpu vfp
|
||||||
|
|
||||||
@ r0: fn
|
@ r0: fn
|
||||||
@ r1: &ecif
|
@ r1: &ecif
|
||||||
@ r2: cif->bytes
|
@ r2: cif->bytes
|
||||||
@@ -321,79 +398,6 @@ LSYM(Lepilogue_vfp):
|
|||||||
.ffi_call_VFP_end:
|
.ffi_call_VFP_end:
|
||||||
UNWIND .fnend
|
UNWIND .fnend
|
||||||
.size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
|
.size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
unsigned int FFI_HIDDEN
|
|
||||||
ffi_closure_SYSV_inner (closure, respp, args)
|
|
||||||
ffi_closure *closure;
|
|
||||||
void **respp;
|
|
||||||
void *args;
|
|
||||||
*/
|
|
||||||
|
|
||||||
ARM_FUNC_START ffi_closure_SYSV
|
|
||||||
UNWIND .pad #16
|
|
||||||
add ip, sp, #16
|
|
||||||
stmfd sp!, {ip, lr}
|
|
||||||
UNWIND .save {r0, lr}
|
|
||||||
add r2, sp, #8
|
|
||||||
.pad #16
|
|
||||||
sub sp, sp, #16
|
|
||||||
str sp, [sp, #8]
|
|
||||||
add r1, sp, #8
|
|
||||||
bl ffi_closure_SYSV_inner
|
|
||||||
cmp r0, #FFI_TYPE_INT
|
|
||||||
beq .Lretint
|
|
||||||
|
|
||||||
cmp r0, #FFI_TYPE_FLOAT
|
|
||||||
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
|
||||||
beq .Lretint
|
|
||||||
#else
|
|
||||||
beq .Lretfloat
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cmp r0, #FFI_TYPE_DOUBLE
|
|
||||||
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
|
||||||
beq .Lretlonglong
|
|
||||||
#else
|
|
||||||
beq .Lretdouble
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cmp r0, #FFI_TYPE_LONGDOUBLE
|
|
||||||
#if defined(__SOFTFP__) || defined(__ARM_EABI__)
|
|
||||||
beq .Lretlonglong
|
|
||||||
#else
|
|
||||||
beq .Lretlongdouble
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cmp r0, #FFI_TYPE_SINT64
|
|
||||||
beq .Lretlonglong
|
|
||||||
.Lclosure_epilogue:
|
|
||||||
add sp, sp, #16
|
|
||||||
ldmfd sp, {sp, pc}
|
|
||||||
.Lretint:
|
|
||||||
ldr r0, [sp]
|
|
||||||
b .Lclosure_epilogue
|
|
||||||
.Lretlonglong:
|
|
||||||
ldr r0, [sp]
|
|
||||||
ldr r1, [sp, #4]
|
|
||||||
b .Lclosure_epilogue
|
|
||||||
|
|
||||||
#if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
|
|
||||||
.Lretfloat:
|
|
||||||
ldfs f0, [sp]
|
|
||||||
b .Lclosure_epilogue
|
|
||||||
.Lretdouble:
|
|
||||||
ldfd f0, [sp]
|
|
||||||
b .Lclosure_epilogue
|
|
||||||
.Lretlongdouble:
|
|
||||||
ldfd f0, [sp]
|
|
||||||
b .Lclosure_epilogue
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.ffi_closure_SYSV_end:
|
|
||||||
UNWIND .fnend
|
|
||||||
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
|
|
||||||
|
|
||||||
|
|
||||||
ARM_FUNC_START ffi_closure_VFP
|
ARM_FUNC_START ffi_closure_VFP
|
||||||
@@ -405,7 +409,7 @@ ARM_FUNC_START ffi_closure_VFP
|
|||||||
UNWIND .save {r0, lr}
|
UNWIND .save {r0, lr}
|
||||||
add r2, sp, #72
|
add r2, sp, #72
|
||||||
add r3, sp, #8
|
add r3, sp, #8
|
||||||
.pad #72
|
UNWIND .pad #72
|
||||||
sub sp, sp, #72
|
sub sp, sp, #72
|
||||||
str sp, [sp, #64]
|
str sp, [sp, #64]
|
||||||
add r1, sp, #64
|
add r1, sp, #64
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
closures.c - Copyright (c) 2007 Red Hat, Inc.
|
closures.c - Copyright (c) 2007 Red Hat, Inc.
|
||||||
Copyright (C) 2007, 2009 Free Software Foundation, Inc
|
Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc
|
||||||
|
|
||||||
Code to allocate and deallocate memory for closures.
|
Code to allocate and deallocate memory for closures.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
darwin.S - Copyright (c) 2000 John Hornkvist
|
darwin.S - Copyright (c) 2000 John Hornkvist
|
||||||
Copyright (c) 2004 Free Software Foundation, Inc.
|
Copyright (c) 2004, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
PowerPC Assembly glue.
|
PowerPC Assembly glue.
|
||||||
|
|
||||||
@@ -24,51 +24,92 @@
|
|||||||
OTHER DEALINGS IN THE SOFTWARE.
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
----------------------------------------------------------------------- */
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#define LIBFFI_ASM
|
||||||
#if defined(__ppc64__)
|
#if defined(__ppc64__)
|
||||||
#define MODE_CHOICE(x, y) y
|
#define MODE_CHOICE(x, y) y
|
||||||
#else
|
#else
|
||||||
#define MODE_CHOICE(x, y) x
|
#define MODE_CHOICE(x, y) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
#define machine_choice MODE_CHOICE(ppc7400,ppc64)
|
||||||
|
|
||||||
#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
; Define some pseudo-opcodes for size-independent load & store of GPRs ...
|
||||||
|
#define lgu MODE_CHOICE(lwzu, ldu)
|
||||||
|
#define lg MODE_CHOICE(lwz,ld)
|
||||||
|
#define sg MODE_CHOICE(stw,std)
|
||||||
|
#define sgu MODE_CHOICE(stwu,stdu)
|
||||||
|
#define sgux MODE_CHOICE(stwux,stdux)
|
||||||
|
|
||||||
|
; ... and the size of GPRs and their storage indicator.
|
||||||
|
#define GPR_BYTES MODE_CHOICE(4,8)
|
||||||
|
#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
||||||
|
#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
||||||
|
|
||||||
|
; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04.
|
||||||
|
#define LINKAGE_SIZE MODE_CHOICE(24,48)
|
||||||
|
#define PARAM_AREA MODE_CHOICE(32,64)
|
||||||
|
#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */
|
||||||
|
|
||||||
|
/* If there is any FP stuff we make space for all of the regs. */
|
||||||
|
#define SAVED_FPR_COUNT 13
|
||||||
|
#define FPR_SIZE 8
|
||||||
|
#define RESULT_BYTES 16
|
||||||
|
|
||||||
|
/* This should be kept in step with the same value in ffi_darwin.c. */
|
||||||
|
#define ASM_NEEDS_REGISTERS 4
|
||||||
|
#define SAVE_REGS_SIZE (ASM_NEEDS_REGISTERS * GPR_BYTES)
|
||||||
|
|
||||||
#define LIBFFI_ASM
|
|
||||||
#include <fficonfig.h>
|
#include <fficonfig.h>
|
||||||
#include <ffi.h>
|
#include <ffi.h>
|
||||||
|
|
||||||
#define JUMPTARGET(name) name
|
#define JUMPTARGET(name) name
|
||||||
#define L(x) x
|
#define L(x) x
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl _ffi_prep_args
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 2
|
.align 2
|
||||||
.globl _ffi_call_DARWIN
|
.globl _ffi_prep_args
|
||||||
.text
|
|
||||||
.align 2
|
.align 2
|
||||||
|
.globl _ffi_call_DARWIN
|
||||||
|
|
||||||
|
/* We arrive here with:
|
||||||
|
r3 = ptr to extended cif.
|
||||||
|
r4 = -bytes.
|
||||||
|
r5 = cif flags.
|
||||||
|
r6 = ptr to return value.
|
||||||
|
r7 = fn pointer (user func).
|
||||||
|
r8 = fn pointer (ffi_prep_args).
|
||||||
|
r9 = ffi_type* for the ret val. */
|
||||||
|
|
||||||
_ffi_call_DARWIN:
|
_ffi_call_DARWIN:
|
||||||
LFB0:
|
Lstartcode:
|
||||||
mr r12,r8 /* We only need r12 until the call,
|
mr r12,r8 /* We only need r12 until the call,
|
||||||
so it doesn't have to be saved. */
|
so it does not have to be saved. */
|
||||||
LFB1:
|
LFB1:
|
||||||
/* Save the old stack pointer as AP. */
|
/* Save the old stack pointer as AP. */
|
||||||
mr r8,r1
|
mr r8,r1
|
||||||
LCFI0:
|
LCFI0:
|
||||||
|
|
||||||
|
/* Save the retval type in parents frame. */
|
||||||
|
sg r9,(LINKAGE_SIZE+6*GPR_BYTES)(r8)
|
||||||
|
|
||||||
/* Allocate the stack space we need. */
|
/* Allocate the stack space we need. */
|
||||||
stwux r1,r1,r4
|
sgux r1,r1,r4
|
||||||
|
|
||||||
/* Save registers we use. */
|
/* Save registers we use. */
|
||||||
mflr r9
|
mflr r9
|
||||||
|
sg r9,SAVED_LR_OFFSET(r8)
|
||||||
|
|
||||||
stw r28,-16(r8)
|
sg r28,-(4 * GPR_BYTES)(r8)
|
||||||
stw r29,-12(r8)
|
sg r29,-(3 * GPR_BYTES)(r8)
|
||||||
stw r30,-8(r8)
|
sg r30,-(2 * GPR_BYTES)(r8)
|
||||||
stw r31,-4(r8)
|
sg r31,-( GPR_BYTES)(r8)
|
||||||
|
|
||||||
|
#if !defined(POWERPC_DARWIN)
|
||||||
|
/* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */
|
||||||
|
sg r2,(5 * GPR_BYTES)(r1)
|
||||||
|
#endif
|
||||||
|
|
||||||
stw r9,8(r8)
|
|
||||||
stw r2,20(r1)
|
|
||||||
LCFI1:
|
LCFI1:
|
||||||
|
|
||||||
/* Save arguments over call. */
|
/* Save arguments over call. */
|
||||||
@@ -77,14 +118,17 @@ LCFI1:
|
|||||||
mr r29,r7 /* function address, */
|
mr r29,r7 /* function address, */
|
||||||
mr r28,r8 /* our AP. */
|
mr r28,r8 /* our AP. */
|
||||||
LCFI2:
|
LCFI2:
|
||||||
/* Call ffi_prep_args. */
|
/* Call ffi_prep_args. r3 = extended cif, r4 = stack ptr copy. */
|
||||||
mr r4,r1
|
mr r4,r1
|
||||||
li r9,0
|
li r9,0
|
||||||
|
|
||||||
mtctr r12 /* r12 holds address of _ffi_prep_args. */
|
mtctr r12 /* r12 holds address of _ffi_prep_args. */
|
||||||
bctrl
|
bctrl
|
||||||
lwz r2,20(r1)
|
|
||||||
|
|
||||||
|
#if !defined(POWERPC_DARWIN)
|
||||||
|
/* The TOC slot is reserved in the Darwin ABI and r2 is volatile. */
|
||||||
|
lg r2,(5 * GPR_BYTES)(r1)
|
||||||
|
#endif
|
||||||
/* Now do the call.
|
/* Now do the call.
|
||||||
Set up cr1 with bits 4-7 of the flags. */
|
Set up cr1 with bits 4-7 of the flags. */
|
||||||
mtcrf 0x40,r31
|
mtcrf 0x40,r31
|
||||||
@@ -92,71 +136,130 @@ LCFI2:
|
|||||||
mtctr r29
|
mtctr r29
|
||||||
/* Load all those argument registers.
|
/* Load all those argument registers.
|
||||||
We have set up a nice stack frame, just load it into registers. */
|
We have set up a nice stack frame, just load it into registers. */
|
||||||
lwz r3,20+(1*4)(r1)
|
lg r3, (LINKAGE_SIZE )(r1)
|
||||||
lwz r4,20+(2*4)(r1)
|
lg r4, (LINKAGE_SIZE + GPR_BYTES)(r1)
|
||||||
lwz r5,20+(3*4)(r1)
|
lg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r1)
|
||||||
lwz r6,20+(4*4)(r1)
|
lg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r1)
|
||||||
nop
|
nop
|
||||||
lwz r7,20+(5*4)(r1)
|
lg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r1)
|
||||||
lwz r8,20+(6*4)(r1)
|
lg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r1)
|
||||||
lwz r9,20+(7*4)(r1)
|
lg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r1)
|
||||||
lwz r10,20+(8*4)(r1)
|
lg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r1)
|
||||||
|
|
||||||
L1:
|
L1:
|
||||||
/* Load all the FP registers. */
|
/* ... Load all the FP registers. */
|
||||||
bf 6,L2 /* No floats to load. */
|
bf 6,L2 /* No floats to load. */
|
||||||
lfd f1,-16-(13*8)(r28)
|
lfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
|
||||||
lfd f2,-16-(12*8)(r28)
|
lfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
|
||||||
lfd f3,-16-(11*8)(r28)
|
lfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
|
||||||
lfd f4,-16-(10*8)(r28)
|
lfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
|
||||||
nop
|
nop
|
||||||
lfd f5,-16-(9*8)(r28)
|
lfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
|
||||||
lfd f6,-16-(8*8)(r28)
|
lfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
|
||||||
lfd f7,-16-(7*8)(r28)
|
lfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
|
||||||
lfd f8,-16-(6*8)(r28)
|
lfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
|
||||||
nop
|
nop
|
||||||
lfd f9,-16-(5*8)(r28)
|
lfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
|
||||||
lfd f10,-16-(4*8)(r28)
|
lfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
|
||||||
lfd f11,-16-(3*8)(r28)
|
lfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
|
||||||
lfd f12,-16-(2*8)(r28)
|
lfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
|
||||||
nop
|
nop
|
||||||
lfd f13,-16-(1*8)(r28)
|
lfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
|
||||||
|
|
||||||
L2:
|
L2:
|
||||||
mr r12,r29 /* Put the target address in r12 as specified. */
|
mr r12,r29 /* Put the target address in r12 as specified. */
|
||||||
mtctr r12
|
mtctr r12
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* Make the call. */
|
/* Make the call. */
|
||||||
bctrl
|
bctrl
|
||||||
|
|
||||||
/* Now, deal with the return value. */
|
/* Now, deal with the return value. */
|
||||||
mtcrf 0x01,r31
|
|
||||||
|
|
||||||
bt 30,L(done_return_value)
|
/* m64 structure returns can occupy the same set of registers as
|
||||||
bt 29,L(fp_return_value)
|
would be used to pass such a structure as arg0 - so take care
|
||||||
stw r3,0(r30)
|
not to step on any possibly hot regs. */
|
||||||
bf 28,L(done_return_value)
|
|
||||||
stw r4,4(r30)
|
|
||||||
|
|
||||||
/* Fall through. */
|
/* Get the flags.. */
|
||||||
|
mtcrf 0x03,r31 ; we need c6 & cr7 now.
|
||||||
|
; FLAG_RETURNS_NOTHING also covers struct ret-by-ref.
|
||||||
|
bt 30,L(done_return_value) ; FLAG_RETURNS_NOTHING
|
||||||
|
bf 27,L(scalar_return_value) ; not FLAG_RETURNS_STRUCT
|
||||||
|
|
||||||
|
/* OK, so we have a struct. */
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
bt 31,L(maybe_return_128) ; FLAG_RETURNS_128BITS, special case
|
||||||
|
|
||||||
L(done_return_value):
|
/* OK, we have to map the return back to a mem struct.
|
||||||
/* Restore the registers we used and return. */
|
We are about to trample the parents param area, so recover the
|
||||||
lwz r9,8(r28)
|
return type. r29 is free, since the call is done. */
|
||||||
lwz r31,-4(r28)
|
lg r29,(LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
|
||||||
mtlr r9
|
|
||||||
lwz r30,-8(r28)
|
sg r3, (LINKAGE_SIZE )(r28)
|
||||||
lwz r29,-12(r28)
|
sg r4, (LINKAGE_SIZE + GPR_BYTES)(r28)
|
||||||
lwz r28,-16(r28)
|
sg r5, (LINKAGE_SIZE + 2 * GPR_BYTES)(r28)
|
||||||
lwz r1,0(r1)
|
sg r6, (LINKAGE_SIZE + 3 * GPR_BYTES)(r28)
|
||||||
blr
|
nop
|
||||||
|
sg r7, (LINKAGE_SIZE + 4 * GPR_BYTES)(r28)
|
||||||
|
sg r8, (LINKAGE_SIZE + 5 * GPR_BYTES)(r28)
|
||||||
|
sg r9, (LINKAGE_SIZE + 6 * GPR_BYTES)(r28)
|
||||||
|
sg r10,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
|
||||||
|
/* OK, so do the block move - we trust that memcpy will not trample
|
||||||
|
the fprs... */
|
||||||
|
mr r3,r30 ; dest
|
||||||
|
addi r4,r28,LINKAGE_SIZE ; source
|
||||||
|
/* The size is a size_t, should be long. */
|
||||||
|
lg r5,0(r29)
|
||||||
|
/* Figure out small structs */
|
||||||
|
cmpi 0,r5,4
|
||||||
|
bgt L3 ; 1, 2 and 4 bytes have special rules.
|
||||||
|
cmpi 0,r5,3
|
||||||
|
beq L3 ; not 3
|
||||||
|
addi r4,r4,8
|
||||||
|
subf r4,r5,r4
|
||||||
|
L3:
|
||||||
|
bl _memcpy
|
||||||
|
|
||||||
|
/* ... do we need the FP registers? - recover the flags.. */
|
||||||
|
mtcrf 0x03,r31 ; we need c6 & cr7 now.
|
||||||
|
bf 29,L(done_return_value) /* No floats in the struct. */
|
||||||
|
stfd f1, -SAVE_REGS_SIZE-(13*FPR_SIZE)(r28)
|
||||||
|
stfd f2, -SAVE_REGS_SIZE-(12*FPR_SIZE)(r28)
|
||||||
|
stfd f3, -SAVE_REGS_SIZE-(11*FPR_SIZE)(r28)
|
||||||
|
stfd f4, -SAVE_REGS_SIZE-(10*FPR_SIZE)(r28)
|
||||||
|
nop
|
||||||
|
stfd f5, -SAVE_REGS_SIZE-( 9*FPR_SIZE)(r28)
|
||||||
|
stfd f6, -SAVE_REGS_SIZE-( 8*FPR_SIZE)(r28)
|
||||||
|
stfd f7, -SAVE_REGS_SIZE-( 7*FPR_SIZE)(r28)
|
||||||
|
stfd f8, -SAVE_REGS_SIZE-( 6*FPR_SIZE)(r28)
|
||||||
|
nop
|
||||||
|
stfd f9, -SAVE_REGS_SIZE-( 5*FPR_SIZE)(r28)
|
||||||
|
stfd f10,-SAVE_REGS_SIZE-( 4*FPR_SIZE)(r28)
|
||||||
|
stfd f11,-SAVE_REGS_SIZE-( 3*FPR_SIZE)(r28)
|
||||||
|
stfd f12,-SAVE_REGS_SIZE-( 2*FPR_SIZE)(r28)
|
||||||
|
nop
|
||||||
|
stfd f13,-SAVE_REGS_SIZE-( 1*FPR_SIZE)(r28)
|
||||||
|
|
||||||
|
mr r3,r29 ; ffi_type *
|
||||||
|
mr r4,r30 ; dest
|
||||||
|
addi r5,r28,-SAVE_REGS_SIZE-(13*FPR_SIZE) ; fprs
|
||||||
|
xor r6,r6,r6
|
||||||
|
sg r6,(LINKAGE_SIZE + 7 * GPR_BYTES)(r28)
|
||||||
|
addi r6,r28,(LINKAGE_SIZE + 7 * GPR_BYTES) ; point to a zeroed counter.
|
||||||
|
bl _darwin64_struct_floats_to_mem
|
||||||
|
|
||||||
|
b L(done_return_value)
|
||||||
|
#else
|
||||||
|
stw r3,0(r30) ; m32 the only struct return in reg is 4 bytes.
|
||||||
|
#endif
|
||||||
|
b L(done_return_value)
|
||||||
|
|
||||||
L(fp_return_value):
|
L(fp_return_value):
|
||||||
/* Do we have long double to store? */
|
/* Do we have long double to store? */
|
||||||
bf 31,L(fd_return_value)
|
bf 31,L(fd_return_value) ; FLAG_RETURNS_128BITS
|
||||||
stfd f1,0(r30)
|
stfd f1,0(r30)
|
||||||
stfd f2,8(r30)
|
stfd f2,FPR_SIZE(r30)
|
||||||
b L(done_return_value)
|
b L(done_return_value)
|
||||||
|
|
||||||
L(fd_return_value):
|
L(fd_return_value):
|
||||||
@@ -170,21 +273,57 @@ L(float_return_value):
|
|||||||
stfs f1,0(r30)
|
stfs f1,0(r30)
|
||||||
b L(done_return_value)
|
b L(done_return_value)
|
||||||
|
|
||||||
|
L(scalar_return_value):
|
||||||
|
bt 29,L(fp_return_value) ; FLAG_RETURNS_FP
|
||||||
|
; ffi_arg is defined as unsigned long.
|
||||||
|
sg r3,0(r30) ; Save the reg.
|
||||||
|
bf 28,L(done_return_value) ; not FLAG_RETURNS_64BITS
|
||||||
|
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
L(maybe_return_128):
|
||||||
|
std r3,0(r30)
|
||||||
|
bf 31,L(done_return_value) ; not FLAG_RETURNS_128BITS
|
||||||
|
std r4,8(r30)
|
||||||
|
#else
|
||||||
|
stw r4,4(r30)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Fall through. */
|
||||||
|
/* We want this at the end to simplify eh epilog computation. */
|
||||||
|
|
||||||
|
L(done_return_value):
|
||||||
|
/* Restore the registers we used and return. */
|
||||||
|
lg r29,SAVED_LR_OFFSET(r28)
|
||||||
|
; epilog
|
||||||
|
lg r31,-(1 * GPR_BYTES)(r28)
|
||||||
|
mtlr r29
|
||||||
|
lg r30,-(2 * GPR_BYTES)(r28)
|
||||||
|
lg r29,-(3 * GPR_BYTES)(r28)
|
||||||
|
lg r28,-(4 * GPR_BYTES)(r28)
|
||||||
|
lg r1,0(r1)
|
||||||
|
blr
|
||||||
LFE1:
|
LFE1:
|
||||||
|
.align 1
|
||||||
/* END(_ffi_call_DARWIN) */
|
/* END(_ffi_call_DARWIN) */
|
||||||
|
|
||||||
/* Provide a null definition of _ffi_call_AIX. */
|
/* Provide a null definition of _ffi_call_AIX. */
|
||||||
.text
|
.text
|
||||||
.align 2
|
.globl _ffi_call_AIX
|
||||||
.globl _ffi_call_AIX
|
|
||||||
.text
|
|
||||||
.align 2
|
.align 2
|
||||||
_ffi_call_AIX:
|
_ffi_call_AIX:
|
||||||
blr
|
blr
|
||||||
/* END(_ffi_call_AIX) */
|
/* END(_ffi_call_AIX) */
|
||||||
|
|
||||||
.data
|
/* EH stuff. */
|
||||||
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms
|
|
||||||
|
#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78)
|
||||||
|
|
||||||
|
.static_data
|
||||||
|
.align LOG2_GPR_BYTES
|
||||||
|
LLFB0$non_lazy_ptr:
|
||||||
|
.g_long Lstartcode
|
||||||
|
|
||||||
|
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
|
||||||
EH_frame1:
|
EH_frame1:
|
||||||
.set L$set$0,LECIE1-LSCIE1
|
.set L$set$0,LECIE1-LSCIE1
|
||||||
.long L$set$0 ; Length of Common Information Entry
|
.long L$set$0 ; Length of Common Information Entry
|
||||||
@@ -193,7 +332,7 @@ LSCIE1:
|
|||||||
.byte 0x1 ; CIE Version
|
.byte 0x1 ; CIE Version
|
||||||
.ascii "zR\0" ; CIE Augmentation
|
.ascii "zR\0" ; CIE Augmentation
|
||||||
.byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
|
.byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
|
||||||
.byte 0x7c ; sleb128 -4; CIE Data Alignment Factor
|
.byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor
|
||||||
.byte 0x41 ; CIE RA Column
|
.byte 0x41 ; CIE RA Column
|
||||||
.byte 0x1 ; uleb128 0x1; Augmentation size
|
.byte 0x1 ; uleb128 0x1; Augmentation size
|
||||||
.byte 0x90 ; FDE Encoding (indirect pcrel)
|
.byte 0x90 ; FDE Encoding (indirect pcrel)
|
||||||
@@ -202,7 +341,8 @@ LSCIE1:
|
|||||||
.byte 0x0 ; uleb128 0x0
|
.byte 0x0 ; uleb128 0x0
|
||||||
.align LOG2_GPR_BYTES
|
.align LOG2_GPR_BYTES
|
||||||
LECIE1:
|
LECIE1:
|
||||||
.globl _ffi_call_DARWIN.eh
|
|
||||||
|
.globl _ffi_call_DARWIN.eh
|
||||||
_ffi_call_DARWIN.eh:
|
_ffi_call_DARWIN.eh:
|
||||||
LSFDE1:
|
LSFDE1:
|
||||||
.set L$set$1,LEFDE1-LASFDE1
|
.set L$set$1,LEFDE1-LASFDE1
|
||||||
@@ -210,11 +350,11 @@ LSFDE1:
|
|||||||
LASFDE1:
|
LASFDE1:
|
||||||
.long LASFDE1-EH_frame1 ; FDE CIE offset
|
.long LASFDE1-EH_frame1 ; FDE CIE offset
|
||||||
.g_long LLFB0$non_lazy_ptr-. ; FDE initial location
|
.g_long LLFB0$non_lazy_ptr-. ; FDE initial location
|
||||||
.set L$set$3,LFE1-LFB0
|
.set L$set$3,LFE1-Lstartcode
|
||||||
.g_long L$set$3 ; FDE address range
|
.g_long L$set$3 ; FDE address range
|
||||||
.byte 0x0 ; uleb128 0x0; Augmentation size
|
.byte 0x0 ; uleb128 0x0; Augmentation size
|
||||||
.byte 0x4 ; DW_CFA_advance_loc4
|
.byte 0x4 ; DW_CFA_advance_loc4
|
||||||
.set L$set$4,LCFI0-LFB1
|
.set L$set$4,LCFI0-Lstartcode
|
||||||
.long L$set$4
|
.long L$set$4
|
||||||
.byte 0xd ; DW_CFA_def_cfa_register
|
.byte 0xd ; DW_CFA_def_cfa_register
|
||||||
.byte 0x08 ; uleb128 0x08
|
.byte 0x08 ; uleb128 0x08
|
||||||
@@ -239,7 +379,5 @@ LASFDE1:
|
|||||||
.byte 0x1c ; uleb128 0x1c
|
.byte 0x1c ; uleb128 0x1c
|
||||||
.align LOG2_GPR_BYTES
|
.align LOG2_GPR_BYTES
|
||||||
LEFDE1:
|
LEFDE1:
|
||||||
.data
|
.align 1
|
||||||
.align LOG2_GPR_BYTES
|
|
||||||
LLFB0$non_lazy_ptr:
|
|
||||||
.g_long LFB0
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation,
|
darwin_closure.S - Copyright (c) 2002, 2003, 2004, 2010,
|
||||||
Inc. based on ppc_closure.S
|
Free Software Foundation, Inc.
|
||||||
|
based on ppc_closure.S
|
||||||
|
|
||||||
PowerPC Assembly glue.
|
PowerPC Assembly glue.
|
||||||
|
|
||||||
@@ -33,91 +34,177 @@
|
|||||||
#define MODE_CHOICE(x, y) x
|
#define MODE_CHOICE(x, y) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define lgu MODE_CHOICE(lwzu, ldu)
|
#define machine_choice MODE_CHOICE(ppc7400,ppc64)
|
||||||
|
|
||||||
#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
; Define some pseudo-opcodes for size-independent load & store of GPRs ...
|
||||||
|
#define lgu MODE_CHOICE(lwzu, ldu)
|
||||||
|
#define lg MODE_CHOICE(lwz,ld)
|
||||||
|
#define sg MODE_CHOICE(stw,std)
|
||||||
|
#define sgu MODE_CHOICE(stwu,stdu)
|
||||||
|
|
||||||
#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
; ... and the size of GPRs and their storage indicator.
|
||||||
|
#define GPR_BYTES MODE_CHOICE(4,8)
|
||||||
|
#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
|
||||||
|
#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
|
||||||
|
|
||||||
|
; From the ABI doc: "Mac OS X ABI Function Call Guide" Version 2009-02-04.
|
||||||
|
#define LINKAGE_SIZE MODE_CHOICE(24,48)
|
||||||
|
#define PARAM_AREA MODE_CHOICE(32,64)
|
||||||
|
|
||||||
|
#define SAVED_CR_OFFSET MODE_CHOICE(4,8) /* save position for CR */
|
||||||
|
#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* save position for lr */
|
||||||
|
|
||||||
|
/* WARNING: if ffi_type is changed... here be monsters.
|
||||||
|
Offsets of items within the result type. */
|
||||||
|
#define FFI_TYPE_TYPE MODE_CHOICE(6,10)
|
||||||
|
#define FFI_TYPE_ELEM MODE_CHOICE(8,16)
|
||||||
|
|
||||||
|
#define SAVED_FPR_COUNT 13
|
||||||
|
#define FPR_SIZE 8
|
||||||
|
/* biggest m64 struct ret is 8GPRS + 13FPRS = 168 bytes - rounded to 16bytes = 176. */
|
||||||
|
#define RESULT_BYTES MODE_CHOICE(16,176)
|
||||||
|
|
||||||
|
; The whole stack frame **MUST** be 16byte-aligned.
|
||||||
|
#define SAVE_SIZE (((LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES)+15) & -16LL)
|
||||||
|
#define PAD_SIZE (SAVE_SIZE-(LINKAGE_SIZE+PARAM_AREA+SAVED_FPR_COUNT*FPR_SIZE+RESULT_BYTES))
|
||||||
|
|
||||||
|
#define PARENT_PARM_BASE (SAVE_SIZE+LINKAGE_SIZE)
|
||||||
|
#define FP_SAVE_BASE (LINKAGE_SIZE+PARAM_AREA)
|
||||||
|
|
||||||
|
#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
|
||||||
|
; We no longer need the pic symbol stub for Darwin >= 9.
|
||||||
|
#define BLCLS_HELP _ffi_closure_helper_DARWIN
|
||||||
|
#define STRUCT_RETVALUE_P _darwin64_struct_ret_by_value_p
|
||||||
|
#define PASS_STR_FLOATS _darwin64_pass_struct_floats
|
||||||
|
#undef WANT_STUB
|
||||||
|
#else
|
||||||
|
#define BLCLS_HELP L_ffi_closure_helper_DARWIN$stub
|
||||||
|
#define STRUCT_RETVALUE_P L_darwin64_struct_ret_by_value_p$stub
|
||||||
|
#define PASS_STR_FLOATS L_darwin64_pass_struct_floats$stub
|
||||||
|
#define WANT_STUB
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* m32/m64
|
||||||
|
|
||||||
|
The stack layout looks like this:
|
||||||
|
|
||||||
|
| Additional params... | | Higher address
|
||||||
|
~ ~ ~
|
||||||
|
| Parameters (at least 8*4/8=32/64) | | NUM_GPR_ARG_REGISTERS
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| TOC=R2 (AIX) Reserved (Darwin) 4/8 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| Reserved 2*4/8 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| Space for callee`s LR 4/8 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| Saved CR [low word for m64] 4/8 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| Current backchain pointer 4/8 |-/ Parent`s frame.
|
||||||
|
|--------------------------------------------| <+ <<< on entry to
|
||||||
|
| Result Bytes 16/176 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
~ padding to 16-byte alignment ~ ~
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| NUM_FPR_ARG_REGISTERS slots | |
|
||||||
|
| here fp13 .. fp1 13*8 | |
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| R3..R10 8*4/8=32/64 | | NUM_GPR_ARG_REGISTERS
|
||||||
|
|--------------------------------------------| |
|
||||||
|
| TOC=R2 (AIX) Reserved (Darwin) 4/8 | |
|
||||||
|
|--------------------------------------------| | stack |
|
||||||
|
| Reserved [compiler,binder] 2*4/8 | | grows |
|
||||||
|
|--------------------------------------------| | down V
|
||||||
|
| Space for callees LR 4/8 | |
|
||||||
|
|--------------------------------------------| | lower addresses
|
||||||
|
| Saved CR [low word for m64] 4/8 | |
|
||||||
|
|--------------------------------------------| | stack pointer here
|
||||||
|
| Current backchain pointer 4/8 |-/ during
|
||||||
|
|--------------------------------------------| <<< call.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
.file "darwin_closure.S"
|
.file "darwin_closure.S"
|
||||||
.text
|
|
||||||
.align LOG2_GPR_BYTES
|
|
||||||
.globl _ffi_closure_ASM
|
|
||||||
|
|
||||||
.text
|
.machine machine_choice
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl _ffi_closure_ASM
|
||||||
.align LOG2_GPR_BYTES
|
.align LOG2_GPR_BYTES
|
||||||
_ffi_closure_ASM:
|
_ffi_closure_ASM:
|
||||||
LFB1:
|
LFB1:
|
||||||
mflr r0 /* extract return address */
|
Lstartcode:
|
||||||
stw r0,8(r1) /* save the return address */
|
mflr r0 /* extract return address */
|
||||||
|
sg r0,SAVED_LR_OFFSET(r1) /* save the return address */
|
||||||
LCFI0:
|
LCFI0:
|
||||||
/* 24 Bytes (Linkage Area)
|
sgu r1,-SAVE_SIZE(r1) /* skip over caller save area
|
||||||
32 Bytes (outgoing parameter area, always reserved)
|
keep stack aligned to 16. */
|
||||||
104 Bytes (13*8 from FPR)
|
|
||||||
16 Bytes (result)
|
|
||||||
176 Bytes */
|
|
||||||
|
|
||||||
stwu r1,-176(r1) /* skip over caller save area
|
|
||||||
keep stack aligned to 16. */
|
|
||||||
LCFI1:
|
LCFI1:
|
||||||
/* We want to build up an area for the parameters passed
|
/* We want to build up an area for the parameters passed
|
||||||
in registers. (both floating point and integer) */
|
in registers. (both floating point and integer) */
|
||||||
|
|
||||||
/* We store gpr 3 to gpr 10 (aligned to 4)
|
/* Put gpr 3 to gpr 10 in the parents outgoing area...
|
||||||
in the parents outgoing area. */
|
... the remainder of any params that overflowed the regs will
|
||||||
stw r3,200(r1)
|
follow here. */
|
||||||
stw r4,204(r1)
|
sg r3, (PARENT_PARM_BASE )(r1)
|
||||||
stw r5,208(r1)
|
sg r4, (PARENT_PARM_BASE + GPR_BYTES )(r1)
|
||||||
stw r6,212(r1)
|
sg r5, (PARENT_PARM_BASE + GPR_BYTES * 2)(r1)
|
||||||
stw r7,216(r1)
|
sg r6, (PARENT_PARM_BASE + GPR_BYTES * 3)(r1)
|
||||||
stw r8,220(r1)
|
sg r7, (PARENT_PARM_BASE + GPR_BYTES * 4)(r1)
|
||||||
stw r9,224(r1)
|
sg r8, (PARENT_PARM_BASE + GPR_BYTES * 5)(r1)
|
||||||
stw r10,228(r1)
|
sg r9, (PARENT_PARM_BASE + GPR_BYTES * 6)(r1)
|
||||||
|
sg r10,(PARENT_PARM_BASE + GPR_BYTES * 7)(r1)
|
||||||
|
|
||||||
/* We save fpr 1 to fpr 13. (aligned to 8) */
|
/* We save fpr 1 to fpr 14 in our own save frame. */
|
||||||
stfd f1,56(r1)
|
stfd f1, (FP_SAVE_BASE )(r1)
|
||||||
stfd f2,64(r1)
|
stfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1)
|
||||||
stfd f3,72(r1)
|
stfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1)
|
||||||
stfd f4,80(r1)
|
stfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1)
|
||||||
stfd f5,88(r1)
|
stfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1)
|
||||||
stfd f6,96(r1)
|
stfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1)
|
||||||
stfd f7,104(r1)
|
stfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1)
|
||||||
stfd f8,112(r1)
|
stfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1)
|
||||||
stfd f9,120(r1)
|
stfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1)
|
||||||
stfd f10,128(r1)
|
stfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1)
|
||||||
stfd f11,136(r1)
|
stfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1)
|
||||||
stfd f12,144(r1)
|
stfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1)
|
||||||
stfd f13,152(r1)
|
stfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1)
|
||||||
|
|
||||||
/* Set up registers for the routine that actually does the work
|
/* Set up registers for the routine that actually does the work
|
||||||
get the context pointer from the trampoline. */
|
get the context pointer from the trampoline. */
|
||||||
mr r3,r11
|
mr r3,r11
|
||||||
|
|
||||||
/* Now load up the pointer to the result storage. */
|
/* Now load up the pointer to the result storage. */
|
||||||
addi r4,r1,160
|
addi r4,r1,(SAVE_SIZE-RESULT_BYTES)
|
||||||
|
|
||||||
/* Now load up the pointer to the saved gpr registers. */
|
/* Now load up the pointer to the saved gpr registers. */
|
||||||
addi r5,r1,200
|
addi r5,r1,PARENT_PARM_BASE
|
||||||
|
|
||||||
/* Now load up the pointer to the saved fpr registers. */
|
/* Now load up the pointer to the saved fpr registers. */
|
||||||
addi r6,r1,56
|
addi r6,r1,FP_SAVE_BASE
|
||||||
|
|
||||||
/* Make the call. */
|
/* Make the call. */
|
||||||
bl Lffi_closure_helper_DARWIN$stub
|
bl BLCLS_HELP
|
||||||
|
|
||||||
/* Now r3 contains the return type
|
/* r3 contains the rtype pointer... save it since we will need
|
||||||
so use it to look up in a table
|
it later. */
|
||||||
|
sg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type
|
||||||
|
lg r0,0(r3) ; size => r0
|
||||||
|
lhz r3,FFI_TYPE_TYPE(r3) ; type => r3
|
||||||
|
|
||||||
|
/* The helper will have intercepted struture returns and inserted
|
||||||
|
the caller`s destination address for structs returned by ref. */
|
||||||
|
|
||||||
|
/* r3 contains the return type so use it to look up in a table
|
||||||
so we know how to deal with each type. */
|
so we know how to deal with each type. */
|
||||||
|
|
||||||
/* Look up the proper starting point in table
|
addi r5,r1,(SAVE_SIZE-RESULT_BYTES) /* Otherwise, our return is here. */
|
||||||
by using return type as offset. */
|
bl Lget_ret_type0_addr /* Get pointer to Lret_type0 into LR. */
|
||||||
addi r5,r1,160 /* Get pointer to results area. */
|
mflr r4 /* Move to r4. */
|
||||||
bl Lget_ret_type0_addr /* Get pointer to Lret_type0 into LR. */
|
slwi r3,r3,4 /* Now multiply return type by 16. */
|
||||||
mflr r4 /* Move to r4. */
|
add r3,r3,r4 /* Add contents of table to table address. */
|
||||||
slwi r3,r3,4 /* Now multiply return type by 16. */
|
mtctr r3
|
||||||
add r3,r3,r4 /* Add contents of table to table address. */
|
bctr /* Jump to it. */
|
||||||
mtctr r3
|
|
||||||
bctr /* Jump to it. */
|
|
||||||
LFE1:
|
LFE1:
|
||||||
/* Each of the ret_typeX code fragments has to be exactly 16 bytes long
|
/* Each of the ret_typeX code fragments has to be exactly 16 bytes long
|
||||||
(4 instructions). For cache effectiveness we align to a 16 byte boundary
|
(4 instructions). For cache effectiveness we align to a 16 byte boundary
|
||||||
@@ -140,7 +227,7 @@ Lret_type0:
|
|||||||
|
|
||||||
/* case FFI_TYPE_INT */
|
/* case FFI_TYPE_INT */
|
||||||
Lret_type1:
|
Lret_type1:
|
||||||
lwz r3,0(r5)
|
lg r3,0(r5)
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
@@ -168,85 +255,224 @@ Lret_type4:
|
|||||||
|
|
||||||
/* case FFI_TYPE_UINT8 */
|
/* case FFI_TYPE_UINT8 */
|
||||||
Lret_type5:
|
Lret_type5:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lbz r3,7(r5)
|
||||||
|
#else
|
||||||
lbz r3,3(r5)
|
lbz r3,3(r5)
|
||||||
|
#endif
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_SINT8 */
|
/* case FFI_TYPE_SINT8 */
|
||||||
Lret_type6:
|
Lret_type6:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lbz r3,7(r5)
|
||||||
|
#else
|
||||||
lbz r3,3(r5)
|
lbz r3,3(r5)
|
||||||
|
#endif
|
||||||
extsb r3,r3
|
extsb r3,r3
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_UINT16 */
|
/* case FFI_TYPE_UINT16 */
|
||||||
Lret_type7:
|
Lret_type7:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lhz r3,6(r5)
|
||||||
|
#else
|
||||||
lhz r3,2(r5)
|
lhz r3,2(r5)
|
||||||
|
#endif
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_SINT16 */
|
/* case FFI_TYPE_SINT16 */
|
||||||
Lret_type8:
|
Lret_type8:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lha r3,6(r5)
|
||||||
|
#else
|
||||||
lha r3,2(r5)
|
lha r3,2(r5)
|
||||||
|
#endif
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_UINT32 */
|
/* case FFI_TYPE_UINT32 */
|
||||||
Lret_type9:
|
Lret_type9:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lwz r3,4(r5)
|
||||||
|
#else
|
||||||
lwz r3,0(r5)
|
lwz r3,0(r5)
|
||||||
|
#endif
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_SINT32 */
|
/* case FFI_TYPE_SINT32 */
|
||||||
Lret_type10:
|
Lret_type10:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lwz r3,4(r5)
|
||||||
|
#else
|
||||||
lwz r3,0(r5)
|
lwz r3,0(r5)
|
||||||
|
#endif
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_UINT64 */
|
/* case FFI_TYPE_UINT64 */
|
||||||
Lret_type11:
|
Lret_type11:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lg r3,0(r5)
|
||||||
|
b Lfinish
|
||||||
|
nop
|
||||||
|
#else
|
||||||
lwz r3,0(r5)
|
lwz r3,0(r5)
|
||||||
lwz r4,4(r5)
|
lwz r4,4(r5)
|
||||||
b Lfinish
|
b Lfinish
|
||||||
|
#endif
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_SINT64 */
|
/* case FFI_TYPE_SINT64 */
|
||||||
Lret_type12:
|
Lret_type12:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lg r3,0(r5)
|
||||||
|
b Lfinish
|
||||||
|
nop
|
||||||
|
#else
|
||||||
lwz r3,0(r5)
|
lwz r3,0(r5)
|
||||||
lwz r4,4(r5)
|
lwz r4,4(r5)
|
||||||
b Lfinish
|
b Lfinish
|
||||||
|
#endif
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_STRUCT */
|
/* case FFI_TYPE_STRUCT */
|
||||||
Lret_type13:
|
Lret_type13:
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
lg r3,0(r5) ; we need at least this...
|
||||||
|
cmpi 0,r0,4
|
||||||
|
bgt Lstructend ; not a special small case
|
||||||
|
b Lsmallstruct ; see if we need more.
|
||||||
|
#else
|
||||||
|
cmpi 0,r0,4
|
||||||
|
bgt Lfinish ; not by value
|
||||||
|
lg r3,0(r5)
|
||||||
|
b Lfinish
|
||||||
|
#endif
|
||||||
|
/* case FFI_TYPE_POINTER */
|
||||||
|
Lret_type14:
|
||||||
|
lg r3,0(r5)
|
||||||
b Lfinish
|
b Lfinish
|
||||||
nop
|
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
/* case FFI_TYPE_POINTER */
|
#if defined(__ppc64__)
|
||||||
Lret_type14:
|
Lsmallstruct:
|
||||||
lwz r3,0(r5)
|
beq Lfour ; continuation of Lret13.
|
||||||
b Lfinish
|
cmpi 0,r0,3
|
||||||
nop
|
beq Lfinish ; don`t adjust this - can`t be any floats here...
|
||||||
nop
|
srdi r3,r3,48
|
||||||
|
cmpi 0,r0,2
|
||||||
|
beq Lfinish ; .. or here ..
|
||||||
|
srdi r3,r3,8
|
||||||
|
b Lfinish ; .. or here.
|
||||||
|
|
||||||
|
Lfour:
|
||||||
|
lg r6,LINKAGE_SIZE(r1) ; get the result type
|
||||||
|
lg r6,FFI_TYPE_ELEM(r6) ; elements array pointer
|
||||||
|
lg r6,0(r6) ; first element
|
||||||
|
lhz r0,FFI_TYPE_TYPE(r6) ; OK go the type
|
||||||
|
cmpi 0,r0,2 ; FFI_TYPE_FLOAT
|
||||||
|
bne Lfourint
|
||||||
|
lfs f1,0(r5) ; just one float in the struct.
|
||||||
|
b Lfinish
|
||||||
|
|
||||||
|
Lfourint:
|
||||||
|
srdi r3,r3,32 ; four bytes.
|
||||||
|
b Lfinish
|
||||||
|
|
||||||
|
Lstructend:
|
||||||
|
lg r3,LINKAGE_SIZE(r1) ; get the result type
|
||||||
|
bl STRUCT_RETVALUE_P
|
||||||
|
cmpi 0,r3,0
|
||||||
|
beq Lfinish ; nope.
|
||||||
|
/* Recover a pointer to the results. */
|
||||||
|
addi r11,r1,(SAVE_SIZE-RESULT_BYTES)
|
||||||
|
lg r3,0(r11) ; we need at least this...
|
||||||
|
lg r4,8(r11)
|
||||||
|
cmpi 0,r0,16
|
||||||
|
beq Lfinish ; special case 16 bytes we don't consider floats.
|
||||||
|
|
||||||
|
/* OK, frustratingly, the process of saving the struct to mem might have
|
||||||
|
messed with the FPRs, so we have to re-load them :(.
|
||||||
|
We`ll use our FPRs space again - calling:
|
||||||
|
void darwin64_pass_struct_floats (ffi_type *s, char *src,
|
||||||
|
unsigned *nfpr, double **fprs)
|
||||||
|
We`ll temporarily pinch the first two slots of the param area for local
|
||||||
|
vars used by the routine. */
|
||||||
|
xor r6,r6,r6
|
||||||
|
addi r5,r1,PARENT_PARM_BASE ; some space
|
||||||
|
sg r6,0(r5) ; *nfpr zeroed.
|
||||||
|
addi r6,r5,8 ; **fprs
|
||||||
|
addi r3,r1,FP_SAVE_BASE ; pointer to FPRs space
|
||||||
|
sg r3,0(r6)
|
||||||
|
mr r4,r11 ; the struct is here...
|
||||||
|
lg r3,LINKAGE_SIZE(r1) ; ffi_type * result_type.
|
||||||
|
bl PASS_STR_FLOATS ; get struct floats into FPR save space.
|
||||||
|
/* See if we used any floats */
|
||||||
|
lwz r0,(SAVE_SIZE-RESULT_BYTES)(r1)
|
||||||
|
cmpi 0,r0,0
|
||||||
|
beq Lstructints ; nope.
|
||||||
|
/* OK load `em up... */
|
||||||
|
lfd f1, (FP_SAVE_BASE )(r1)
|
||||||
|
lfd f2, (FP_SAVE_BASE + FPR_SIZE )(r1)
|
||||||
|
lfd f3, (FP_SAVE_BASE + FPR_SIZE * 2 )(r1)
|
||||||
|
lfd f4, (FP_SAVE_BASE + FPR_SIZE * 3 )(r1)
|
||||||
|
lfd f5, (FP_SAVE_BASE + FPR_SIZE * 4 )(r1)
|
||||||
|
lfd f6, (FP_SAVE_BASE + FPR_SIZE * 5 )(r1)
|
||||||
|
lfd f7, (FP_SAVE_BASE + FPR_SIZE * 6 )(r1)
|
||||||
|
lfd f8, (FP_SAVE_BASE + FPR_SIZE * 7 )(r1)
|
||||||
|
lfd f9, (FP_SAVE_BASE + FPR_SIZE * 8 )(r1)
|
||||||
|
lfd f10,(FP_SAVE_BASE + FPR_SIZE * 9 )(r1)
|
||||||
|
lfd f11,(FP_SAVE_BASE + FPR_SIZE * 10)(r1)
|
||||||
|
lfd f12,(FP_SAVE_BASE + FPR_SIZE * 11)(r1)
|
||||||
|
lfd f13,(FP_SAVE_BASE + FPR_SIZE * 12)(r1)
|
||||||
|
|
||||||
|
/* point back at our saved struct. */
|
||||||
|
Lstructints:
|
||||||
|
addi r11,r1,(SAVE_SIZE-RESULT_BYTES)
|
||||||
|
lg r3,0(r11) ; we end up picking the
|
||||||
|
lg r4,8(r11) ; first two again.
|
||||||
|
lg r5,16(r11)
|
||||||
|
lg r6,24(r11)
|
||||||
|
lg r7,32(r11)
|
||||||
|
lg r8,40(r11)
|
||||||
|
lg r9,48(r11)
|
||||||
|
lg r10,56(r11)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* case done */
|
/* case done */
|
||||||
Lfinish:
|
Lfinish:
|
||||||
addi r1,r1,176 /* Restore stack pointer. */
|
addi r1,r1,SAVE_SIZE /* Restore stack pointer. */
|
||||||
lwz r0,8(r1) /* Get return address. */
|
lg r0,SAVED_LR_OFFSET(r1) /* Get return address. */
|
||||||
mtlr r0 /* Reset link register. */
|
mtlr r0 /* Reset link register. */
|
||||||
blr
|
blr
|
||||||
|
Lendcode:
|
||||||
|
.align 1
|
||||||
|
|
||||||
/* END(ffi_closure_ASM) */
|
/* END(ffi_closure_ASM) */
|
||||||
|
|
||||||
.data
|
/* EH frame stuff. */
|
||||||
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
|
#define EH_DATA_ALIGN_FACT MODE_CHOICE(0x7c,0x78)
|
||||||
|
/* 176, 400 */
|
||||||
|
#define EH_FRAME_OFFSETA MODE_CHOICE(176,0x90)
|
||||||
|
#define EH_FRAME_OFFSETB MODE_CHOICE(1,3)
|
||||||
|
|
||||||
|
.static_data
|
||||||
|
.align LOG2_GPR_BYTES
|
||||||
|
LLFB1$non_lazy_ptr:
|
||||||
|
.g_long Lstartcode
|
||||||
|
|
||||||
|
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
|
||||||
EH_frame1:
|
EH_frame1:
|
||||||
.set L$set$0,LECIE1-LSCIE1
|
.set L$set$0,LECIE1-LSCIE1
|
||||||
.long L$set$0 ; Length of Common Information Entry
|
.long L$set$0 ; Length of Common Information Entry
|
||||||
@@ -255,7 +481,7 @@ LSCIE1:
|
|||||||
.byte 0x1 ; CIE Version
|
.byte 0x1 ; CIE Version
|
||||||
.ascii "zR\0" ; CIE Augmentation
|
.ascii "zR\0" ; CIE Augmentation
|
||||||
.byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
|
.byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor
|
||||||
.byte 0x7c ; sleb128 -4; CIE Data Alignment Factor
|
.byte EH_DATA_ALIGN_FACT ; sleb128 -4; CIE Data Alignment Factor
|
||||||
.byte 0x41 ; CIE RA Column
|
.byte 0x41 ; CIE RA Column
|
||||||
.byte 0x1 ; uleb128 0x1; Augmentation size
|
.byte 0x1 ; uleb128 0x1; Augmentation size
|
||||||
.byte 0x90 ; FDE Encoding (indirect pcrel)
|
.byte 0x90 ; FDE Encoding (indirect pcrel)
|
||||||
@@ -264,7 +490,7 @@ LSCIE1:
|
|||||||
.byte 0x0 ; uleb128 0x0
|
.byte 0x0 ; uleb128 0x0
|
||||||
.align LOG2_GPR_BYTES
|
.align LOG2_GPR_BYTES
|
||||||
LECIE1:
|
LECIE1:
|
||||||
.globl _ffi_closure_ASM.eh
|
.globl _ffi_closure_ASM.eh
|
||||||
_ffi_closure_ASM.eh:
|
_ffi_closure_ASM.eh:
|
||||||
LSFDE1:
|
LSFDE1:
|
||||||
.set L$set$1,LEFDE1-LASFDE1
|
.set L$set$1,LEFDE1-LASFDE1
|
||||||
@@ -273,45 +499,77 @@ LSFDE1:
|
|||||||
LASFDE1:
|
LASFDE1:
|
||||||
.long LASFDE1-EH_frame1 ; FDE CIE offset
|
.long LASFDE1-EH_frame1 ; FDE CIE offset
|
||||||
.g_long LLFB1$non_lazy_ptr-. ; FDE initial location
|
.g_long LLFB1$non_lazy_ptr-. ; FDE initial location
|
||||||
.set L$set$3,LFE1-LFB1
|
.set L$set$3,LFE1-Lstartcode
|
||||||
.g_long L$set$3 ; FDE address range
|
.g_long L$set$3 ; FDE address range
|
||||||
.byte 0x0 ; uleb128 0x0; Augmentation size
|
.byte 0x0 ; uleb128 0x0; Augmentation size
|
||||||
.byte 0x4 ; DW_CFA_advance_loc4
|
.byte 0x4 ; DW_CFA_advance_loc4
|
||||||
.set L$set$3,LCFI1-LCFI0
|
.set L$set$3,LCFI1-LCFI0
|
||||||
.long L$set$3
|
.long L$set$3
|
||||||
.byte 0xe ; DW_CFA_def_cfa_offset
|
.byte 0xe ; DW_CFA_def_cfa_offset
|
||||||
.byte 176,1 ; uleb128 176
|
.byte EH_FRAME_OFFSETA,EH_FRAME_OFFSETB ; uleb128 176,1/190,3
|
||||||
.byte 0x4 ; DW_CFA_advance_loc4
|
.byte 0x4 ; DW_CFA_advance_loc4
|
||||||
.set L$set$4,LCFI0-LFB1
|
.set L$set$4,LCFI0-Lstartcode
|
||||||
.long L$set$4
|
.long L$set$4
|
||||||
.byte 0x11 ; DW_CFA_offset_extended_sf
|
.byte 0x11 ; DW_CFA_offset_extended_sf
|
||||||
.byte 0x41 ; uleb128 0x41
|
.byte 0x41 ; uleb128 0x41
|
||||||
.byte 0x7e ; sleb128 -2
|
.byte 0x7e ; sleb128 -2
|
||||||
.align LOG2_GPR_BYTES
|
.align LOG2_GPR_BYTES
|
||||||
LEFDE1:
|
LEFDE1:
|
||||||
.data
|
.align 1
|
||||||
.align LOG2_GPR_BYTES
|
|
||||||
LDFCM0:
|
#ifdef WANT_STUB
|
||||||
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||||
.align LOG2_GPR_BYTES
|
.align 5
|
||||||
Lffi_closure_helper_DARWIN$stub:
|
L_ffi_closure_helper_DARWIN$stub:
|
||||||
#if 1
|
|
||||||
.indirect_symbol _ffi_closure_helper_DARWIN
|
.indirect_symbol _ffi_closure_helper_DARWIN
|
||||||
mflr r0
|
mflr r0
|
||||||
bcl 20,31,LO$ffi_closure_helper_DARWIN
|
bcl 20,31,"L00000000001$spb"
|
||||||
LO$ffi_closure_helper_DARWIN:
|
"L00000000001$spb":
|
||||||
mflr r11
|
mflr r11
|
||||||
addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)
|
addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L00000000001$spb")
|
||||||
mtlr r0
|
mtlr r0
|
||||||
lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11)
|
lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr-"L00000000001$spb")(r11)
|
||||||
mtctr r12
|
mtctr r12
|
||||||
bctr
|
bctr
|
||||||
.lazy_symbol_pointer
|
.lazy_symbol_pointer
|
||||||
L_ffi_closure_helper_DARWIN$lazy_ptr:
|
L_ffi_closure_helper_DARWIN$lazy_ptr:
|
||||||
.indirect_symbol _ffi_closure_helper_DARWIN
|
.indirect_symbol _ffi_closure_helper_DARWIN
|
||||||
.g_long dyld_stub_binding_helper
|
.long dyld_stub_binding_helper
|
||||||
|
|
||||||
|
#if defined(__ppc64__)
|
||||||
|
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||||
|
.align 5
|
||||||
|
L_darwin64_struct_ret_by_value_p$stub:
|
||||||
|
.indirect_symbol _darwin64_struct_ret_by_value_p
|
||||||
|
mflr r0
|
||||||
|
bcl 20,31,"L00000000002$spb"
|
||||||
|
"L00000000002$spb":
|
||||||
|
mflr r11
|
||||||
|
addis r11,r11,ha16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L00000000002$spb")
|
||||||
|
mtlr r0
|
||||||
|
lwzu r12,lo16(L_darwin64_struct_ret_by_value_p$lazy_ptr-"L00000000002$spb")(r11)
|
||||||
|
mtctr r12
|
||||||
|
bctr
|
||||||
|
.lazy_symbol_pointer
|
||||||
|
L_darwin64_struct_ret_by_value_p$lazy_ptr:
|
||||||
|
.indirect_symbol _darwin64_struct_ret_by_value_p
|
||||||
|
.long dyld_stub_binding_helper
|
||||||
|
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||||
|
.align 5
|
||||||
|
L_darwin64_pass_struct_floats$stub:
|
||||||
|
.indirect_symbol _darwin64_pass_struct_floats
|
||||||
|
mflr r0
|
||||||
|
bcl 20,31,"L00000000003$spb"
|
||||||
|
"L00000000003$spb":
|
||||||
|
mflr r11
|
||||||
|
addis r11,r11,ha16(L_darwin64_pass_struct_floats$lazy_ptr-"L00000000003$spb")
|
||||||
|
mtlr r0
|
||||||
|
lwzu r12,lo16(L_darwin64_pass_struct_floats$lazy_ptr-"L00000000003$spb")(r11)
|
||||||
|
mtctr r12
|
||||||
|
bctr
|
||||||
|
.lazy_symbol_pointer
|
||||||
|
L_darwin64_pass_struct_floats$lazy_ptr:
|
||||||
|
.indirect_symbol _darwin64_pass_struct_floats
|
||||||
|
.long dyld_stub_binding_helper
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
.data
|
|
||||||
.align LOG2_GPR_BYTES
|
|
||||||
LLFB1$non_lazy_ptr:
|
|
||||||
.g_long LFB1
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
/* -----------------------------------------------------------------*-C-*-
|
/* -----------------------------------------------------------------*-C-*-
|
||||||
ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
|
ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc.
|
||||||
Copyright (C) 2007, 2008 Free Software Foundation, Inc
|
Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc
|
||||||
Target configuration macros for PowerPC.
|
Target configuration macros for PowerPC.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@@ -34,10 +34,13 @@
|
|||||||
#ifndef POWERPC64
|
#ifndef POWERPC64
|
||||||
#define POWERPC64
|
#define POWERPC64
|
||||||
#endif
|
#endif
|
||||||
#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin */
|
#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin64 */
|
||||||
#ifndef POWERPC64
|
#ifndef POWERPC64
|
||||||
#define POWERPC64
|
#define POWERPC64
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef POWERPC_DARWIN64
|
||||||
|
#define POWERPC_DARWIN64
|
||||||
|
#endif
|
||||||
#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */
|
#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */
|
||||||
#ifndef POWERPC64
|
#ifndef POWERPC64
|
||||||
#define POWERPC64
|
#define POWERPC64
|
||||||
@@ -114,9 +117,13 @@ typedef enum ffi_abi {
|
|||||||
#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2)
|
#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2)
|
||||||
|
|
||||||
#if defined(POWERPC64) || defined(POWERPC_AIX)
|
#if defined(POWERPC64) || defined(POWERPC_AIX)
|
||||||
#define FFI_TRAMPOLINE_SIZE 24
|
# if defined(POWERPC_DARWIN64)
|
||||||
|
# define FFI_TRAMPOLINE_SIZE 48
|
||||||
|
# else
|
||||||
|
# define FFI_TRAMPOLINE_SIZE 24
|
||||||
|
# endif
|
||||||
#else /* POWERPC || POWERPC_AIX */
|
#else /* POWERPC || POWERPC_AIX */
|
||||||
#define FFI_TRAMPOLINE_SIZE 40
|
# define FFI_TRAMPOLINE_SIZE 40
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LIBFFI_ASM
|
#ifndef LIBFFI_ASM
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Copyright (c) 2002 Ranjit Mathew
|
Copyright (c) 2002 Ranjit Mathew
|
||||||
Copyright (c) 2002 Bo Thorsen
|
Copyright (c) 2002 Bo Thorsen
|
||||||
Copyright (c) 2002 Roger Sayle
|
Copyright (c) 2002 Roger Sayle
|
||||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
Copyright (C) 2008, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
x86 Foreign Function Interface
|
x86 Foreign Function Interface
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de>
|
ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de>
|
||||||
Copyright (c) 2008 Red Hat, Inc.
|
Copyright (c) 2008, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
x86-64 Foreign Function Interface
|
x86-64 Foreign Function Interface
|
||||||
|
|
||||||
|
|||||||
@@ -328,6 +328,25 @@ ffi_closure_raw_SYSV:
|
|||||||
.size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
|
.size ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined __PIC__
|
||||||
|
# if defined __sun__ && defined __svr4__
|
||||||
|
/* 32-bit Solaris 2/x86 uses datarel encoding for PIC. GNU ld before 2.22
|
||||||
|
doesn't correctly sort .eh_frame_hdr with mixed encodings, so match this. */
|
||||||
|
# define FDE_ENCODING 0x30 /* datarel */
|
||||||
|
# define FDE_ENCODE(X) X@GOTOFF
|
||||||
|
# else
|
||||||
|
# define FDE_ENCODING 0x1b /* pcrel sdata4 */
|
||||||
|
# if defined HAVE_AS_X86_PCREL
|
||||||
|
# define FDE_ENCODE(X) X-.
|
||||||
|
# else
|
||||||
|
# define FDE_ENCODE(X) X@rel
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define FDE_ENCODING 0 /* absolute */
|
||||||
|
# define FDE_ENCODE(X) X
|
||||||
|
#endif
|
||||||
|
|
||||||
.section .eh_frame,EH_FRAME_FLAGS,@progbits
|
.section .eh_frame,EH_FRAME_FLAGS,@progbits
|
||||||
.Lframe1:
|
.Lframe1:
|
||||||
.long .LECIE1-.LSCIE1 /* Length of Common Information Entry */
|
.long .LECIE1-.LSCIE1 /* Length of Common Information Entry */
|
||||||
@@ -354,7 +373,7 @@ ffi_closure_raw_SYSV:
|
|||||||
.byte 0x8 /* CIE RA Column */
|
.byte 0x8 /* CIE RA Column */
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
.byte 0x1 /* .uleb128 0x1; Augmentation size */
|
.byte 0x1 /* .uleb128 0x1; Augmentation size */
|
||||||
.byte 0x1b /* FDE Encoding (pcrel sdata4) */
|
.byte FDE_ENCODING
|
||||||
#endif
|
#endif
|
||||||
.byte 0xc /* DW_CFA_def_cfa */
|
.byte 0xc /* DW_CFA_def_cfa */
|
||||||
.byte 0x4 /* .uleb128 0x4 */
|
.byte 0x4 /* .uleb128 0x4 */
|
||||||
@@ -367,14 +386,8 @@ ffi_closure_raw_SYSV:
|
|||||||
.long .LEFDE1-.LASFDE1 /* FDE Length */
|
.long .LEFDE1-.LASFDE1 /* FDE Length */
|
||||||
.LASFDE1:
|
.LASFDE1:
|
||||||
.long .LASFDE1-.Lframe1 /* FDE CIE offset */
|
.long .LASFDE1-.Lframe1 /* FDE CIE offset */
|
||||||
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
|
.long FDE_ENCODE(.LFB1) /* FDE initial location */
|
||||||
.long .LFB1-. /* FDE initial location */
|
.long .LFE1-.LFB1 /* FDE address range */
|
||||||
#elif defined __PIC__
|
|
||||||
.long .LFB1@rel
|
|
||||||
#else
|
|
||||||
.long .LFB1
|
|
||||||
#endif
|
|
||||||
.long .LFE1-.LFB1 /* FDE address range */
|
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
||||||
#endif
|
#endif
|
||||||
@@ -394,14 +407,8 @@ ffi_closure_raw_SYSV:
|
|||||||
.long .LEFDE2-.LASFDE2 /* FDE Length */
|
.long .LEFDE2-.LASFDE2 /* FDE Length */
|
||||||
.LASFDE2:
|
.LASFDE2:
|
||||||
.long .LASFDE2-.Lframe1 /* FDE CIE offset */
|
.long .LASFDE2-.Lframe1 /* FDE CIE offset */
|
||||||
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
|
.long FDE_ENCODE(.LFB2) /* FDE initial location */
|
||||||
.long .LFB2-. /* FDE initial location */
|
.long .LFE2-.LFB2 /* FDE address range */
|
||||||
#elif defined __PIC__
|
|
||||||
.long .LFB2@rel
|
|
||||||
#else
|
|
||||||
.long .LFB2
|
|
||||||
#endif
|
|
||||||
.long .LFE2-.LFB2 /* FDE address range */
|
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
||||||
#endif
|
#endif
|
||||||
@@ -430,14 +437,8 @@ ffi_closure_raw_SYSV:
|
|||||||
.long .LEFDE3-.LASFDE3 /* FDE Length */
|
.long .LEFDE3-.LASFDE3 /* FDE Length */
|
||||||
.LASFDE3:
|
.LASFDE3:
|
||||||
.long .LASFDE3-.Lframe1 /* FDE CIE offset */
|
.long .LASFDE3-.Lframe1 /* FDE CIE offset */
|
||||||
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
|
.long FDE_ENCODE(.LFB3) /* FDE initial location */
|
||||||
.long .LFB3-. /* FDE initial location */
|
.long .LFE3-.LFB3 /* FDE address range */
|
||||||
#elif defined __PIC__
|
|
||||||
.long .LFB3@rel
|
|
||||||
#else
|
|
||||||
.long .LFB3
|
|
||||||
#endif
|
|
||||||
.long .LFE3-.LFB3 /* FDE address range */
|
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ 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)/m4/libtool.m4 \
|
||||||
$(top_srcdir)/configure.ac
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||||
|
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||||
|
$(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 = $(install_sh) -d
|
mkinstalldirs = $(install_sh) -d
|
||||||
@@ -165,6 +167,7 @@ psdir = @psdir@
|
|||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
sys_symbol_underscore = @sys_symbol_underscore@
|
||||||
sysconfdir = @sysconfdir@
|
sysconfdir = @sysconfdir@
|
||||||
target = @target@
|
target = @target@
|
||||||
target_alias = @target_alias@
|
target_alias = @target_alias@
|
||||||
|
|||||||
@@ -77,6 +77,26 @@
|
|||||||
#define PRIuPTR "lu"
|
#define PRIuPTR "lu"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* IRIX kludge. */
|
||||||
|
#if defined(__sgi)
|
||||||
|
/* IRIX 6.5 <inttypes.h> provides all definitions, but only for C99
|
||||||
|
compilations. */
|
||||||
|
#if (_MIPS_SZLONG == 32)
|
||||||
|
#define PRId64 "lld"
|
||||||
|
#define PRIu64 "llu"
|
||||||
|
#endif
|
||||||
|
/* This doesn't match <inttypes.h>, which always has "lld" here, but the
|
||||||
|
arguments are uint64_t, int64_t, which are unsigned long, long for
|
||||||
|
64-bit in <sgidefs.h>. */
|
||||||
|
#if (_MIPS_SZLONG == 64)
|
||||||
|
#define PRId64 "ld"
|
||||||
|
#define PRIu64 "lu"
|
||||||
|
#endif
|
||||||
|
/* This doesn't match <inttypes.h>, which has "u" here, but the arguments
|
||||||
|
are uintptr_t, which is always unsigned long. */
|
||||||
|
#define PRIuPTR "lu"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Solaris < 10 kludge. */
|
/* Solaris < 10 kludge. */
|
||||||
#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
|
#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
|
||||||
#if defined(__arch64__) || defined (__x86_64__)
|
#if defined(__arch64__) || defined (__x86_64__)
|
||||||
|
|||||||
Reference in New Issue
Block a user