2014-12-23 08:39:13 -05:00
|
|
|
diff -ru libffi-3.2.1/src/x86/ffi.c libffi-3.2.1/src/x86/ffi.c
|
|
|
|
--- libffi-3.2.1/src/x86/ffi.c 2014-11-08 21:47:24.000000000 +0900
|
2014-12-25 05:01:41 -05:00
|
|
|
+++ libffi-3.2.1/src/x86/ffi.c 2014-12-25 18:46:14.806761900 +0900
|
2014-12-23 08:39:13 -05:00
|
|
|
@@ -99,11 +99,13 @@
|
|
|
|
i != 0;
|
|
|
|
i--, p_arg += dir, p_argv += dir)
|
|
|
|
{
|
|
|
|
+ size_t z;
|
|
|
|
+
|
|
|
|
/* Align if necessary */
|
|
|
|
if ((sizeof(void*) - 1) & (size_t) argp)
|
|
|
|
argp = (char *) ALIGN(argp, sizeof(void*));
|
|
|
|
|
|
|
|
- size_t z = (*p_arg)->size;
|
|
|
|
+ z = (*p_arg)->size;
|
|
|
|
|
|
|
|
#ifdef X86_WIN64
|
|
|
|
if (z > FFI_SIZEOF_ARG
|
2014-12-25 05:01:41 -05:00
|
|
|
@@ -202,6 +204,7 @@
|
|
|
|
on top of stack, so that those can be moved to registers by call-handler. */
|
|
|
|
if (stack_args_count > 0)
|
|
|
|
{
|
|
|
|
+ int i;
|
|
|
|
if (dir < 0 && stack_args_count > 1)
|
|
|
|
{
|
|
|
|
/* Reverse order if iterating arguments backwards */
|
|
|
|
@@ -210,7 +213,6 @@
|
|
|
|
*(ffi_arg*) p_stack_data[stack_args_count - 1] = tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
- int i;
|
|
|
|
for (i = 0; i < stack_args_count; i++)
|
|
|
|
{
|
|
|
|
if (p_stack_data[i] != argp2)
|
|
|
|
@@ -569,11 +571,12 @@
|
|
|
|
i < cif->nargs && passed_regs < max_stack_count;
|
|
|
|
i++, p_arg++)
|
|
|
|
{
|
|
|
|
+ size_t sz;
|
|
|
|
if ((*p_arg)->type == FFI_TYPE_FLOAT
|
|
|
|
|| (*p_arg)->type == FFI_TYPE_STRUCT)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
- size_t sz = (*p_arg)->size;
|
|
|
|
+ sz = (*p_arg)->size;
|
|
|
|
if(sz == 0 || sz > FFI_SIZEOF_ARG)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
@@ -599,11 +602,13 @@
|
2014-12-23 08:39:13 -05:00
|
|
|
i != 0;
|
|
|
|
i--, p_arg += dir, p_argv += dir)
|
|
|
|
{
|
|
|
|
+ size_t z;
|
|
|
|
+
|
|
|
|
/* Align if necessary */
|
|
|
|
if ((sizeof(void*) - 1) & (size_t) argp)
|
|
|
|
argp = (char *) ALIGN(argp, sizeof(void*));
|
|
|
|
|
|
|
|
- size_t z = (*p_arg)->size;
|
|
|
|
+ z = (*p_arg)->size;
|
|
|
|
|
|
|
|
#ifdef X86_WIN64
|
|
|
|
if (z > FFI_SIZEOF_ARG
|
2014-12-25 05:01:41 -05:00
|
|
|
@@ -642,7 +647,7 @@
|
2014-12-23 08:39:13 -05:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
- return (size_t)argp - (size_t)stack;
|
|
|
|
+ return (int)((size_t)argp - (size_t)stack);
|
|
|
|
}
|
|
|
|
|
|
|
|
#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \
|
2014-12-25 05:01:41 -05:00
|
|
|
@@ -855,11 +860,12 @@
|
|
|
|
|
|
|
|
for (i = 0; i < cif->nargs && passed_regs <= max_regs; i++)
|
|
|
|
{
|
|
|
|
+ size_t sz;
|
|
|
|
if (cif->arg_types[i]->type == FFI_TYPE_FLOAT
|
|
|
|
|| cif->arg_types[i]->type == FFI_TYPE_STRUCT)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
- size_t sz = cif->arg_types[i]->size;
|
|
|
|
+ sz = cif->arg_types[i]->size;
|
|
|
|
if (sz == 0 || sz > FFI_SIZEOF_ARG)
|
|
|
|
continue;
|
|
|
|
|
2014-12-23 08:39:13 -05:00
|
|
|
diff -ru libffi-3.2.1/src/x86/ffitarget.h libffi-3.2.1/src/x86/ffitarget.h
|
|
|
|
--- libffi-3.2.1/src/x86/ffitarget.h 2014-11-08 21:47:24.000000000 +0900
|
|
|
|
+++ libffi-3.2.1/src/x86/ffitarget.h 2014-12-22 15:45:54.000000000 +0900
|
|
|
|
@@ -50,7 +50,9 @@
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION
|
|
|
|
+#ifndef _MSC_VER
|
|
|
|
#define FFI_TARGET_HAS_COMPLEX_TYPE
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
/* ---- Generic type definitions ----------------------------------------- */
|
|
|
|
|
|
|
|
diff -ru libffi-3.2.1/src/x86/win64.S libffi-3.2.1/src/x86/win64.S
|
|
|
|
--- libffi-3.2.1/src/x86/win64.S 2014-11-08 21:47:24.000000000 +0900
|
|
|
|
+++ libffi-3.2.1/src/x86/win64.S 2014-12-22 16:14:40.000000000 +0900
|
|
|
|
@@ -127,7 +127,7 @@
|
|
|
|
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
mov DWORD PTR [rcx], eax
|
|
|
|
- jmp ret_void$
|
|
|
|
+ jmp SHORT ret_void$
|
|
|
|
|
|
|
|
ret_struct2b$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_2B
|
|
|
|
@@ -135,7 +135,7 @@
|
|
|
|
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
mov WORD PTR [rcx], ax
|
|
|
|
- jmp ret_void$
|
|
|
|
+ jmp SHORT ret_void$
|
|
|
|
|
|
|
|
ret_struct1b$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_1B
|
|
|
|
@@ -143,7 +143,7 @@
|
|
|
|
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
mov BYTE PTR [rcx], al
|
|
|
|
- jmp ret_void$
|
|
|
|
+ jmp SHORT ret_void$
|
|
|
|
|
|
|
|
ret_uint8$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT8
|
|
|
|
@@ -152,7 +152,7 @@
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
movzx rax, al
|
|
|
|
mov QWORD PTR [rcx], rax
|
|
|
|
- jmp ret_void$
|
|
|
|
+ jmp SHORT ret_void$
|
|
|
|
|
|
|
|
ret_sint8$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT8
|
|
|
|
@@ -161,7 +161,7 @@
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
movsx rax, al
|
|
|
|
mov QWORD PTR [rcx], rax
|
|
|
|
- jmp ret_void$
|
|
|
|
+ jmp SHORT ret_void$
|
|
|
|
|
|
|
|
ret_uint16$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT16
|
|
|
|
@@ -188,7 +188,13 @@
|
|
|
|
mov rcx, QWORD PTR RVALUE[rbp]
|
|
|
|
mov eax, eax
|
|
|
|
mov QWORD PTR [rcx], rax
|
|
|
|
- jmp SHORT ret_void$
|
|
|
|
+
|
|
|
|
+ret_void$:
|
|
|
|
+ xor rax, rax
|
|
|
|
+
|
|
|
|
+ lea rsp, QWORD PTR [rbp+16]
|
|
|
|
+ pop rbp
|
|
|
|
+ ret 0
|
|
|
|
|
|
|
|
ret_sint32$:
|
|
|
|
cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT32
|
|
|
|
@@ -247,13 +253,6 @@
|
|
|
|
cdqe
|
|
|
|
mov QWORD PTR [rcx], rax
|
|
|
|
jmp SHORT ret_void$
|
|
|
|
-
|
|
|
|
-ret_void$:
|
|
|
|
- xor rax, rax
|
|
|
|
-
|
|
|
|
- lea rsp, QWORD PTR [rbp+16]
|
|
|
|
- pop rbp
|
|
|
|
- ret 0
|
|
|
|
ffi_call_win64 ENDP
|
|
|
|
_TEXT ENDS
|
|
|
|
END
|
2015-01-10 22:54:35 -05:00
|
|
|
diff -ru libffi-3.2.1/include/ffi.h.in libffi-3.2.1/include/ffi.h.in
|
|
|
|
--- libffi-3.2.1/include/ffi.h.in 2014-11-08 21:47:24.000000000 +0900
|
|
|
|
+++ libffi-3.2.1/include/ffi.h.in 2015-01-11 12:35:30.000000000 +0900
|
|
|
|
@@ -103,6 +103,11 @@
|
|
|
|
# undef FFI_64_BIT_MAX
|
|
|
|
# define FFI_64_BIT_MAX 9223372036854775807LL
|
|
|
|
# endif
|
|
|
|
+# ifdef _MSC_VER
|
|
|
|
+# define FFI_LONG_LONG_MAX _I64_MAX
|
|
|
|
+# undef FFI_64_BIT_MAX
|
|
|
|
+# define FFI_64_BIT_MAX 9223372036854775807I64
|
|
|
|
+# endif
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|