Skip to content

Commit

Permalink
[libffi] Update patch to fix apply patch failure (#17637)
Browse files Browse the repository at this point in the history
* [libffi] Update patch to fix apply patch failure

* update version record
  • Loading branch information
JackBoosY committed May 7, 2021
1 parent dd630c9 commit 86d689b
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 28 deletions.
2 changes: 1 addition & 1 deletion ports/libffi/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "libffi",
"version": "3.3",
"port-version": 8,
"port-version": 9,
"description": "Portable, high level programming interface to various calling conventions",
"homepage": "https://github.com/libffi/libffi"
}
31 changes: 5 additions & 26 deletions ports/libffi/win32-disable-stackframe-check.patch
Original file line number Diff line number Diff line change
@@ -1,32 +1,11 @@
Rolf Gebhardt <rolf.gebhardt@lbs-sw.de>
22 Jul 2020
[PATCH] x86/win32: disable runtime stack frame checks with msvc
around built assembly

based on the patch for x86/win64:

From 53291b332b1bc061a3409d3b60c38f313609b98e Mon Sep 17 00:00:00 2001
From: Matthew Waters <matthew@centricular.com>
Date: Fri, 16 Mar 2018 15:10:04 +1100
Subject: [PATCH] x86/win64: disable runtime stack frame checks with msvc
around built assembly

MSVC can add truntime code that checks if a stack frame is mismanaged
however our custom assembly delibrately accesses and modifies the parent
stack frame. Fortunately we can disable that specific check for the
function call so do that.
---
src/x86/ffi.c | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/src/x86/ffi.c b/src/x86/ffi.c
index 9a59218..9f5d703 100644
--- a/src/x86/ffi.c
+++ b/src/x86/ffi.c
@@ -255,6 +255,14 @@ static const struct abi_params abi_params[FFI_LAST_ABI] = {

extern void FFI_DECLARE_FASTCALL ffi_call_i386(struct call_frame *, char *) FFI_HIDDEN;

+/* we perform some black magic here to use some of the parent's
+ * stack frame in ff_call_win() that breaks with the msvc compiler
+ * with the /RTCs or /GZ flags. Disable the 'Stack frame run time
Expand All @@ -37,14 +16,14 @@ index 9a59218..9f5d703 100644
+#endif
static void
ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
void **avalue, void *closure)
void **avalue, void *closure)
@@ -390,6 +398,9 @@ ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,

ffi_call_i386 (frame, stack);
}
+#if defined(_MSC_VER)
+#pragma runtime_checks("s", restore)
+#endif

void
ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
2 changes: 1 addition & 1 deletion versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -3078,7 +3078,7 @@
},
"libffi": {
"baseline": "3.3",
"port-version": 8
"port-version": 9
},
"libfido2": {
"baseline": "1.7.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/l-/libffi.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "c40f59f0527e2336818bd5d6b0d14ae2bdc5c286",
"version": "3.3",
"port-version": 9
},
{
"git-tree": "ea2ed30397fc14caf66d8f7290306cfc5c5aa424",
"version": "3.3",
Expand Down

0 comments on commit 86d689b

Please sign in to comment.