From 0efe75ec20e0275a4b8de31aabd713613f56bfe7 Mon Sep 17 00:00:00 2001 From: Reno Dakota Date: Thu, 31 Oct 2024 19:34:17 -0700 Subject: [PATCH] libffi: move label before .cfi_starproc after https://github.com/llvm/llvm-project/commit/0b0672773e8b2ed01ad3fce103f4d84becfdd1ed clang_19 will produce errors if the function label comes after .cfi_starproc. Vendor upstream commit https://github.com/libffi/libffi/commit/8308bed5b2423878aa20d7884a99cf2e30b8daf7 to fix the issue --- pkgs/development/libraries/libffi/default.nix | 3 ++ .../libffi/label-before-cfi_startproc.patch | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 pkgs/development/libraries/libffi/label-before-cfi_startproc.patch diff --git a/pkgs/development/libraries/libffi/default.nix b/pkgs/development/libraries/libffi/default.nix index 9293077b1aa7..021776ed3856 100644 --- a/pkgs/development/libraries/libffi/default.nix +++ b/pkgs/development/libraries/libffi/default.nix @@ -22,6 +22,9 @@ stdenv.mkDerivation (finalAttrs: { # cgit) that are needed here should be included directly in Nixpkgs as # files. patches = [ + # https://github.com/libffi/libffi/pull/857 + # function label needs to come before .cfi_startproc + ./label-before-cfi_startproc.patch ]; strictDeps = true; diff --git a/pkgs/development/libraries/libffi/label-before-cfi_startproc.patch b/pkgs/development/libraries/libffi/label-before-cfi_startproc.patch new file mode 100644 index 000000000000..379c670b4546 --- /dev/null +++ b/pkgs/development/libraries/libffi/label-before-cfi_startproc.patch @@ -0,0 +1,47 @@ +From 3065c530d3aa50c2b5ee9c01f88a9c0b61732805 Mon Sep 17 00:00:00 2001 +From: Ivan Tadeu Ferreira Antunes Filho +Date: Mon, 16 Sep 2024 16:10:39 -0400 +Subject: [PATCH] Move cfi_startproc after CNAME(label) + +This is a fix for https://github.com/libffi/libffi/issues/852: error: invalid CFI advance_loc expression on apple targets. + +The CFI for darwin arm64 was broken because the CNAME macro was being used after the +cfi_startproc macro. +--- + src/aarch64/sysv.S | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index 6a9a5611f..e83bc65de 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -89,8 +89,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + x5 closure + */ + +- cfi_startproc + CNAME(ffi_call_SYSV): ++ cfi_startproc + BTI_C + PAC_CFI_WINDOW_SAVE + /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ +@@ -348,8 +348,8 @@ CNAME(ffi_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR + PAC_CFI_WINDOW_SAVE +@@ -647,8 +647,8 @@ CNAME(ffi_go_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_go_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR_LINUX_ONLY + PAC_CFI_WINDOW_SAVE