diff options
Diffstat (limited to 'libffi/libffi.dllize-3.0.6.patch')
-rw-r--r-- | libffi/libffi.dllize-3.0.6.patch | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/libffi/libffi.dllize-3.0.6.patch b/libffi/libffi.dllize-3.0.6.patch new file mode 100644 index 0000000000..6a19f1119d --- /dev/null +++ b/libffi/libffi.dllize-3.0.6.patch @@ -0,0 +1,217 @@ +diff -Nur libffi-3.0.6/Makefile.am build/Makefile.am +--- libffi-3.0.6/Makefile.am 2008-02-21 13:36:18.000000000 +0000 ++++ build/Makefile.am 2009-01-23 17:56:09.000000000 +0000 +@@ -165,7 +165,7 @@ + + AM_CFLAGS = -Wall -g -fexceptions + +-libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` ++libffi_la_LDFLAGS = $(LIBFFI_LDFLAGS) -version-info `grep -v '^\#' $(srcdir)/libtool-version` + + AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src + AM_CCASFLAGS = $(AM_CPPFLAGS) +diff -Nur libffi-3.0.6/configure.ac build/configure.ac +--- libffi-3.0.6/configure.ac 2008-07-17 13:57:33.000000000 +0100 ++++ build/configure.ac 2009-01-23 17:56:09.000000000 +0000 +@@ -26,6 +26,20 @@ + + AM_PROG_AS + AM_PROG_CC_C_O ++ ++AC_LIBTOOL_WIN32_DLL ++AC_SUBST(LIBFFI_DLL,0) ++ ++case $host in ++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) ++ if test "$enable_shared" = yes; then ++ LIBFFI_LDFLAGS="-no-undefined -Wl,--export-all-symbols" ++ LIBFFI_DLL=1 ++ fi ++ ;; ++esac ++AC_SUBST(LIBFFI_LDFLAGS) ++ + AC_PROG_LIBTOOL + + AM_MAINTAINER_MODE +diff -Nur libffi-3.0.6/include/ffi.h.in build/include/ffi.h.in +--- libffi-3.0.6/include/ffi.h.in 2008-04-03 19:57:34.000000000 +0100 ++++ build/include/ffi.h.in 2009-01-23 17:56:09.000000000 +0000 +@@ -61,6 +61,17 @@ + #define @TARGET@ + #endif + ++#if @LIBFFI_DLL@ ++#ifdef DLL_EXPORT ++#define __FFI_DECLSPEC __declspec(__dllexport__) ++#else ++#define __FFI_DECLSPEC __declspec(__dllimport__) ++#endif ++#else ++#define __FFI_DECLSPEC ++#endif ++ ++ + /* ---- System configuration information --------------------------------- */ + + #include <ffitarget.h> +@@ -223,27 +234,27 @@ + #endif + + +-void ffi_raw_call (ffi_cif *cif, +- void (*fn)(void), +- void *rvalue, +- ffi_raw *avalue); +- +-void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); +-void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); +-size_t ffi_raw_size (ffi_cif *cif); ++__FFI_DECLSPEC void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++__FFI_DECLSPEC void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++__FFI_DECLSPEC void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++__FFI_DECLSPEC size_t ffi_raw_size (ffi_cif *cif); + + /* This is analogous to the raw API, except it uses Java parameter */ + /* packing, even on 64-bit machines. I.e. on 64-bit machines */ + /* longs and doubles are followed by an empty 64-bit word. */ + +-void ffi_java_raw_call (ffi_cif *cif, +- void (*fn)(void), +- void *rvalue, +- ffi_java_raw *avalue); +- +-void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); +-void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); +-size_t ffi_java_raw_size (ffi_cif *cif); ++__FFI_DECLSPEC void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++__FFI_DECLSPEC void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++__FFI_DECLSPEC void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++__FFI_DECLSPEC size_t ffi_java_raw_size (ffi_cif *cif); + + /* ---- Definitions for closures ----------------------------------------- */ + +@@ -256,16 +267,16 @@ + void *user_data; + } ffi_closure __attribute__((aligned (8))); + +-void *ffi_closure_alloc (size_t size, void **code); +-void ffi_closure_free (void *); ++__FFI_DECLSPEC void *ffi_closure_alloc (size_t size, void **code); ++__FFI_DECLSPEC void ffi_closure_free (void *); + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_closure (ffi_closure*, + ffi_cif *, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data); + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_closure_loc (ffi_closure*, + ffi_cif *, + void (*fun)(ffi_cif*,void*,void**,void*), +@@ -314,26 +325,26 @@ + + } ffi_java_raw_closure; + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_raw_closure (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data); + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_raw_closure_loc (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc); + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_java_raw_closure (ffi_java_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data); + +-ffi_status ++__FFI_DECLSPEC ffi_status + ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), +@@ -344,16 +355,16 @@ + + /* ---- Public interface definition -------------------------------------- */ + +-ffi_status ffi_prep_cif(ffi_cif *cif, +- ffi_abi abi, +- unsigned int nargs, +- ffi_type *rtype, +- ffi_type **atypes); +- +-void ffi_call(ffi_cif *cif, +- void (*fn)(void), +- void *rvalue, +- void **avalue); ++__FFI_DECLSPEC ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++__FFI_DECLSPEC void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + + /* Useful for eliminating compiler warnings */ + #define FFI_FN(f) ((void (*)(void))f) +diff -Nur libffi-3.0.6/include/ffi_common.h build/include/ffi_common.h +--- libffi-3.0.6/include/ffi_common.h 2008-07-12 06:43:00.000000000 +0100 ++++ build/include/ffi_common.h 2009-01-23 17:56:09.000000000 +0000 +@@ -49,9 +49,9 @@ + #endif + + #ifdef FFI_DEBUG +-void ffi_assert(char *expr, char *file, int line); +-void ffi_stop_here(void); +-void ffi_type_test(ffi_type *a, char *file, int line); ++__FFI_DECLSPEC void ffi_assert(char *expr, char *file, int line); ++__FFI_DECLSPEC void ffi_stop_here(void); ++__FFI_DECLSPEC void ffi_type_test(ffi_type *a, char *file, int line); + + #define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) + #define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) +@@ -66,7 +66,7 @@ + #define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) + + /* Perform machine dependent cif processing */ +-ffi_status ffi_prep_cif_machdep(ffi_cif *cif); ++__FFI_DECLSPEC ffi_status ffi_prep_cif_machdep(ffi_cif *cif); + + /* Extended cif, used in callback from assembly routine */ + typedef struct +diff -Nur libffi-3.0.6/src/x86/win32.S build/src/x86/win32.S +--- libffi-3.0.6/src/x86/win32.S 2008-02-15 01:24:06.000000000 +0000 ++++ build/src/x86/win32.S 2009-01-23 17:56:09.000000000 +0000 +@@ -33,8 +33,6 @@ + + .text + +-.globl ffi_prep_args +- + # This assumes we are using gas. + .balign 16 + .globl _ffi_call_SYSV |