Modify the ffi_closure structures to hold table/table entry pointers instead of a code buffer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
diff --git a/include/ffi.h.in b/include/ffi.h.in
index 92e38c4..501f16e 100644
--- a/include/ffi.h.in
+++ b/include/ffi.h.in
@@ -257,7 +257,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;
@@ -284,7 +289,12 @@ ffi_prep_closure_loc (ffi_closure*,
void*codeloc);
typedef struct {
+#if FFI_EXEC_TRAMPOLINE_TABLE
+ void *trampoline_table;
+ void *trampoline_table_entry;
+#else
char tramp[FFI_TRAMPOLINE_SIZE];
+#endif
ffi_cif *cif;
@@ -305,7 +315,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;