- Update to commit c2a6859 - gccbug.patch: Update check for gccbug target flag - stdcall.patch: Fix FFI_STDCALL ABI - libffi-riscv.patch: Removed - libffi-include-location.patch: Removed OBS-URL: https://build.opensuse.org/request/show/731700 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/libffi?expand=0&rev=15
59 lines
1.7 KiB
Diff
59 lines
1.7 KiB
Diff
Index: libffi-3.2.1.git505/src/x86/ffi.c
|
|
===================================================================
|
|
--- libffi-3.2.1.git505.orig/src/x86/ffi.c
|
|
+++ libffi-3.2.1.git505/src/x86/ffi.c
|
|
@@ -51,6 +51,13 @@
|
|
# define __declspec(x) __attribute__((x))
|
|
#endif
|
|
|
|
+#if defined(_MSC_VER) && defined(_M_IX86)
|
|
+/* Stack is not 16-byte aligned on Windows. */
|
|
+#define STACK_ALIGN(bytes) (bytes)
|
|
+#else
|
|
+#define STACK_ALIGN(bytes) FFI_ALIGN (bytes, 16)
|
|
+#endif
|
|
+
|
|
/* Perform machine dependent cif processing. */
|
|
ffi_status FFI_HIDDEN
|
|
ffi_prep_cif_machdep(ffi_cif *cif)
|
|
@@ -177,12 +184,7 @@ ffi_prep_cif_machdep(ffi_cif *cif)
|
|
bytes = FFI_ALIGN (bytes, t->alignment);
|
|
bytes += FFI_ALIGN (t->size, FFI_SIZEOF_ARG);
|
|
}
|
|
-#if defined(_MSC_VER) && defined(_M_IX86)
|
|
- // stack is not 16-bit aligned on Windows
|
|
cif->bytes = bytes;
|
|
-#else
|
|
- cif->bytes = FFI_ALIGN (bytes, 16);
|
|
-#endif
|
|
|
|
return FFI_OK;
|
|
}
|
|
@@ -290,7 +292,7 @@ ffi_call_int (ffi_cif *cif, void (*fn)(v
|
|
}
|
|
}
|
|
|
|
- bytes = cif->bytes;
|
|
+ bytes = STACK_ALIGN (cif->bytes);
|
|
stack = alloca(bytes + sizeof(*frame) + rsize);
|
|
argp = (dir < 0 ? stack + bytes : stack);
|
|
frame = (struct call_frame *)(stack + bytes);
|
|
@@ -434,7 +436,7 @@ ffi_closure_inner (struct closure_frame
|
|
rvalue = frame->rettemp;
|
|
pabi = &abi_params[cabi];
|
|
dir = pabi->dir;
|
|
- argp = (dir < 0 ? stack + cif->bytes : stack);
|
|
+ argp = (dir < 0 ? stack + STACK_ALIGN (cif->bytes) : stack);
|
|
|
|
switch (flags)
|
|
{
|
|
@@ -698,7 +700,7 @@ ffi_raw_call(ffi_cif *cif, void (*fn)(vo
|
|
}
|
|
}
|
|
|
|
- bytes = cif->bytes;
|
|
+ bytes = STACK_ALIGN (cif->bytes);
|
|
argp = stack =
|
|
(void *)((uintptr_t)alloca(bytes + sizeof(*frame) + rsize + 15) & ~16);
|
|
frame = (struct call_frame *)(stack + bytes);
|