Rebase for ppc64 fix
[libffi.git] / patches / apple-fixes
1 Index: libffi/ChangeLog
2 ===================================================================
3 --- libffi.orig/ChangeLog
4 +++ libffi/ChangeLog
5 @@ -29,6 +29,13 @@
6  
7         * configure: Regenerated.
8  
9 +2012-04-05  Zachary Waldowski  <zwaldowski@gmail.com>
10 +
11 +       * include/ffi.h.in: Add missing trampoline table fields.
12 +       * src/arm/sysv.S: Fix ENTRY definition, and wrap symbol references
13 +       in CNAME.
14 +       * src/x86/ffi.c: Wrap Windows specific code in ifdefs.
15 +
16  2012-03-29  Peter Rosin  <peda@lysator.liu.se>
17  
18         * src/x86/win32.S (ffi_closure_raw_THISCALL): Unify the frame
19 Index: libffi/include/ffi.h.in
20 ===================================================================
21 --- libffi.orig/include/ffi.h.in
22 +++ libffi/include/ffi.h.in
23 @@ -297,7 +297,12 @@ size_t ffi_java_raw_size (ffi_cif *cif);
24  __declspec(align(8))
25  #endif
26  typedef struct {
27 +#if @FFI_EXEC_TRAMPOLINE_TABLE@
28 +  void *trampoline_table;
29 +  void *trampoline_table_entry;
30 +#else
31    char tramp[FFI_TRAMPOLINE_SIZE];
32 +#endif
33    ffi_cif   *cif;
34    void     (*fun)(ffi_cif*,void*,void**,void*);
35    void      *user_data;
36 @@ -330,8 +335,12 @@ ffi_prep_closure_loc (ffi_closure*,
37  # pragma pack 8
38  #endif
39  typedef struct {
40 +#if @FFI_EXEC_TRAMPOLINE_TABLE@
41 +  void *trampoline_table;
42 +  void *trampoline_table_entry;
43 +#else
44    char tramp[FFI_TRAMPOLINE_SIZE];
45 -
46 +#endif
47    ffi_cif   *cif;
48  
49  #if !FFI_NATIVE_RAW_API
50 @@ -351,7 +360,12 @@ typedef struct {
51  } ffi_raw_closure;
52  
53  typedef struct {
54 +#if @FFI_EXEC_TRAMPOLINE_TABLE@
55 +  void *trampoline_table;
56 +  void *trampoline_table_entry;
57 +#else
58    char tramp[FFI_TRAMPOLINE_SIZE];
59 +#endif
60  
61    ffi_cif   *cif;
62  
63 Index: libffi/src/arm/sysv.S
64 ===================================================================
65 --- libffi.orig/src/arm/sysv.S
66 +++ libffi/src/arm/sysv.S
67 @@ -41,7 +41,7 @@
68  #define CNAME(x) x
69  #endif
70  #ifdef __APPLE__
71 -#define ENTRY(x) .globl CNAME(x); CNAME(x):
72 +#define ENTRY(x) .globl _##x; _##x:
73  #else
74  #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x):
75  #endif /* __APPLE__ */
76 @@ -187,7 +187,7 @@ ARM_FUNC_START ffi_call_SYSV
77         @     r1 already set
78  
79         @ Call ffi_prep_args(stack, &ecif)
80 -       bl      ffi_prep_args
81 +       bl      CNAME(ffi_prep_args)
82  
83         @ move first 4 parameters in registers
84         ldmia   sp, {r0-r3}
85 @@ -364,7 +364,7 @@ ARM_FUNC_START ffi_call_VFP
86         sub     r2, fp, #64   @ VFP scratch space
87  
88         @ Call ffi_prep_args(stack, &ecif, vfp_space)
89 -       bl      ffi_prep_args
90 +       bl      CNAME(ffi_prep_args)
91  
92         @ Load VFP register args if needed
93         cmp     r0, #0
94 @@ -446,7 +446,7 @@ ARM_FUNC_START ffi_closure_VFP
95         sub     sp, sp, #72
96         str     sp, [sp, #64]
97         add     r1, sp, #64
98 -       bl      ffi_closure_SYSV_inner
99 +       bl      CNAME(ffi_closure_SYSV_inner)
100  
101         cmp     r0, #FFI_TYPE_INT
102         beq     .Lretint_vfp
103 Index: libffi/src/x86/ffi.c
104 ===================================================================
105 --- libffi.orig/src/x86/ffi.c
106 +++ libffi/src/x86/ffi.c
107 @@ -280,9 +280,11 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
108        else
109  #endif
110          {
111 +#ifdef X86_WIN32
112            if (cif->abi == FFI_MS_CDECL)
113              cif->flags = FFI_TYPE_MS_STRUCT;
114            else
115 +#endif
116              cif->flags = FFI_TYPE_STRUCT;
117            /* allocate space for return value pointer */
118            cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG);