119 lines
3.1 KiB
Plaintext
119 lines
3.1 KiB
Plaintext
Index: libffi/ChangeLog
|
|
===================================================================
|
|
--- libffi.orig/ChangeLog
|
|
+++ libffi/ChangeLog
|
|
@@ -24,6 +24,13 @@
|
|
|
|
* configure: Regenerated.
|
|
|
|
+2012-04-05 Zachary Waldowski <zwaldowski@gmail.com>
|
|
+
|
|
+ * include/ffi.h.in: Add missing trampoline table fields.
|
|
+ * src/arm/sysv.S: Fix ENTRY definition, and wrap symbol references
|
|
+ in CNAME.
|
|
+ * src/x86/ffi.c: Wrap Windows specific code in ifdefs.
|
|
+
|
|
2012-03-29 Peter Rosin <peda@lysator.liu.se>
|
|
|
|
* src/x86/win32.S (ffi_closure_raw_THISCALL): Unify the frame
|
|
Index: libffi/include/ffi.h.in
|
|
===================================================================
|
|
--- libffi.orig/include/ffi.h.in
|
|
+++ libffi/include/ffi.h.in
|
|
@@ -297,7 +297,12 @@ size_t ffi_java_raw_size (ffi_cif *cif);
|
|
__declspec(align(8))
|
|
#endif
|
|
typedef struct {
|
|
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
|
|
+ void *trampoline_table;
|
|
+ void *trampoline_table_entry;
|
|
+#else
|
|
char tramp[FFI_TRAMPOLINE_SIZE];
|
|
+#endif
|
|
ffi_cif *cif;
|
|
void (*fun)(ffi_cif*,void*,void**,void*);
|
|
void *user_data;
|
|
@@ -330,8 +335,12 @@ ffi_prep_closure_loc (ffi_closure*,
|
|
# pragma pack 8
|
|
#endif
|
|
typedef struct {
|
|
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
|
|
+ void *trampoline_table;
|
|
+ void *trampoline_table_entry;
|
|
+#else
|
|
char tramp[FFI_TRAMPOLINE_SIZE];
|
|
-
|
|
+#endif
|
|
ffi_cif *cif;
|
|
|
|
#if !FFI_NATIVE_RAW_API
|
|
@@ -351,7 +360,12 @@ typedef struct {
|
|
} ffi_raw_closure;
|
|
|
|
typedef struct {
|
|
+#if @FFI_EXEC_TRAMPOLINE_TABLE@
|
|
+ void *trampoline_table;
|
|
+ void *trampoline_table_entry;
|
|
+#else
|
|
char tramp[FFI_TRAMPOLINE_SIZE];
|
|
+#endif
|
|
|
|
ffi_cif *cif;
|
|
|
|
Index: libffi/src/arm/sysv.S
|
|
===================================================================
|
|
--- libffi.orig/src/arm/sysv.S
|
|
+++ libffi/src/arm/sysv.S
|
|
@@ -41,7 +41,7 @@
|
|
#define CNAME(x) x
|
|
#endif
|
|
#ifdef __APPLE__
|
|
-#define ENTRY(x) .globl CNAME(x); CNAME(x):
|
|
+#define ENTRY(x) .globl _##x; _##x:
|
|
#else
|
|
#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
|
|
#endif /* __APPLE__ */
|
|
@@ -187,7 +187,7 @@ ARM_FUNC_START ffi_call_SYSV
|
|
@ r1 already set
|
|
|
|
@ Call ffi_prep_args(stack, &ecif)
|
|
- bl ffi_prep_args
|
|
+ bl CNAME(ffi_prep_args)
|
|
|
|
@ move first 4 parameters in registers
|
|
ldmia sp, {r0-r3}
|
|
@@ -364,7 +364,7 @@ ARM_FUNC_START ffi_call_VFP
|
|
sub r2, fp, #64 @ VFP scratch space
|
|
|
|
@ Call ffi_prep_args(stack, &ecif, vfp_space)
|
|
- bl ffi_prep_args
|
|
+ bl CNAME(ffi_prep_args)
|
|
|
|
@ Load VFP register args if needed
|
|
cmp r0, #0
|
|
@@ -446,7 +446,7 @@ ARM_FUNC_START ffi_closure_VFP
|
|
sub sp, sp, #72
|
|
str sp, [sp, #64]
|
|
add r1, sp, #64
|
|
- bl ffi_closure_SYSV_inner
|
|
+ bl CNAME(ffi_closure_SYSV_inner)
|
|
|
|
cmp r0, #FFI_TYPE_INT
|
|
beq .Lretint_vfp
|
|
Index: libffi/src/x86/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/x86/ffi.c
|
|
+++ libffi/src/x86/ffi.c
|
|
@@ -280,9 +280,11 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
|
|
else
|
|
#endif
|
|
{
|
|
+#ifdef X86_WIN32
|
|
if (cif->abi == FFI_MS_CDECL)
|
|
cif->flags = FFI_TYPE_MS_STRUCT;
|
|
else
|
|
+#endif
|
|
cif->flags = FFI_TYPE_STRUCT;
|
|
/* allocate space for return value pointer */
|
|
cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG);
|