Hi Theo,

----- Mail original -----
> running ruff on a modern intel laptop results in this:
> 
> PSIG  SIGILL SIG_DFL code=ILL_BTCFI addr=0x1f232ae9cc0 trapno=21
> 
> Program terminated with signal SIGILL, Illegal instruction.
> #0  rust_psm_stack_pointer () at src/arch/x86_64.s:42
> 
> Diff below fixes it. It's taken from volker's PR:
> https://github.com/rust-lang/stacker/pull/81
> 
> I don't have a bti-capable arm64 machine, so it's only compile tested
> there.

I have no amd64/arm64 machine with BTI at home to test your fix :(
Only tested with patch + build on current/amd64 with Rust 1.98.1.

Attached a diff to update ruff to the latest version 0.16.7, including your 
patches to fix BTI/IBT issue.

thanks, Laurent

Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/ruff/Makefile,v
diff -u -p -r1.19 Makefile
--- Makefile	9 Sep 2026 09:23:23 -0000	1.19
+++ Makefile	14 Sep 2026 16:14:24 -0000
@@ -3,7 +3,7 @@ NOT_FOR_ARCHS =	sparc64
 
 COMMENT =	Python linter and code formatter
 
-MODPY_DISTV =	0.16.6
+MODPY_DISTV =	0.16.7
 
 GH_ACCOUNT =	astral-sh
 GH_PROJECT =	ruff
Index: crates.inc
===================================================================
RCS file: /cvs/ports/devel/ruff/crates.inc,v
diff -u -p -r1.18 crates.inc
--- crates.inc	9 Sep 2026 09:23:23 -0000	1.18
+++ crates.inc	14 Sep 2026 16:14:24 -0000
@@ -46,13 +46,13 @@ MODCARGO_CRATES +=	cc	1.2.65	# MIT OR Ap
 MODCARGO_CRATES +=	cfg-if	1.0.4	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	cfg_aliases	0.2.1	# MIT
 MODCARGO_CRATES +=	chacha20	0.10.0	# MIT OR Apache-2.0
-MODCARGO_CRATES +=	char_str	0.0.2	# MIT
+MODCARGO_CRATES +=	char_str	0.0.4	# MIT
 MODCARGO_CRATES +=	chrono	0.4.44	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	ciborium	0.2.2	# Apache-2.0
 MODCARGO_CRATES +=	ciborium-io	0.2.2	# Apache-2.0
 MODCARGO_CRATES +=	ciborium-ll	0.2.2	# Apache-2.0
-MODCARGO_CRATES +=	clap	4.6.5	# MIT OR Apache-2.0
-MODCARGO_CRATES +=	clap_builder	4.6.5	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	clap	4.6.6	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	clap_builder	4.6.6	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	clap_complete	4.5.58	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	clap_complete_command	0.6.1	# MIT
 MODCARGO_CRATES +=	clap_complete_nushell	4.5.8	# MIT OR Apache-2.0
@@ -134,8 +134,8 @@ MODCARGO_CRATES +=	futures-task	0.3.32	#
 MODCARGO_CRATES +=	futures-util	0.3.32	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	gen-lsp-types	0.11.0	# MIT
 MODCARGO_CRATES +=	generic-array	0.14.7	# MIT
-MODCARGO_CRATES +=	get-size-derive2	0.10.3	# MIT OR Apache-2.0
-MODCARGO_CRATES +=	get-size2	0.10.3	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	get-size-derive2	0.11.0	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	get-size2	0.11.0	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	getopts	0.2.24	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	getrandom	0.2.16	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	getrandom	0.3.4	# MIT OR Apache-2.0
@@ -313,8 +313,8 @@ MODCARGO_CRATES +=	regex-automata	0.4.18
 MODCARGO_CRATES +=	regex-lite	0.1.7	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	regex-syntax	0.8.11	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	rend	0.5.3	# MIT
-MODCARGO_CRATES +=	rkyv	0.8.17	# MIT
-MODCARGO_CRATES +=	rkyv_derive	0.8.17	# MIT
+MODCARGO_CRATES +=	rkyv	0.8.18	# MIT
+MODCARGO_CRATES +=	rkyv_derive	0.8.18	# MIT
 MODCARGO_CRATES +=	ron	0.12.0	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	rust-stemmers	1.2.0	# MIT/BSD-3-Clause
 MODCARGO_CRATES +=	rustc-hash	2.1.3	# Apache-2.0 OR MIT
@@ -373,9 +373,9 @@ MODCARGO_CRATES +=	test-case-core	3.3.1	
 MODCARGO_CRATES +=	test-case-macros	3.3.1	# MIT
 MODCARGO_CRATES +=	thin-vec	0.2.19	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	thiserror	1.0.69	# MIT OR Apache-2.0
-MODCARGO_CRATES +=	thiserror	2.0.19	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	thiserror	2.0.20	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	thiserror-impl	1.0.69	# MIT OR Apache-2.0
-MODCARGO_CRATES +=	thiserror-impl	2.0.19	# MIT OR Apache-2.0
+MODCARGO_CRATES +=	thiserror-impl	2.0.20	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	thread_local	1.1.9	# MIT OR Apache-2.0
 MODCARGO_CRATES +=	tikv-jemalloc-sys	0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7	# MIT/Apache-2.0
 MODCARGO_CRATES +=	tikv-jemallocator	0.6.1	# MIT/Apache-2.0
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/ruff/distinfo,v
diff -u -p -r1.18 distinfo
--- distinfo	9 Sep 2026 09:23:23 -0000	1.18
+++ distinfo	14 Sep 2026 16:14:25 -0000
@@ -46,13 +46,13 @@ SHA256 (cargo/cc-1.2.65.tar.gz) = 4ijuyb
 SHA256 (cargo/cfg-if-1.0.4.tar.gz) = kzD4sv8T80VAtE6UbvNREYJXJ7ONMyhu+YYUJhUSGAE=
 SHA256 (cargo/cfg_aliases-0.2.1.tar.gz) = YTr+R/zV+sfM8duTurywgsWZTZlvILixWfKtFljrVyQ=
 SHA256 (cargo/chacha20-0.10.0.tar.gz) = b42YMoaEPklnWkt6LRdO/hNtyToY1pEw3RgZimwWdgE=
-SHA256 (cargo/char_str-0.0.2.tar.gz) = V2ulb2yhjrsGnQ0HJgQHFxcSr/Tf4V7j+JgtwWpFW88=
+SHA256 (cargo/char_str-0.0.4.tar.gz) = ycunilq7UVYQ4Qryl2FUNLAZdVtde+FOVZ/1NA3/UMQ=
 SHA256 (cargo/chrono-0.4.44.tar.gz) = xnMHWi4OX0od3ifOne4epFWMf/5kj1dkOKIModKsxLA=
 SHA256 (cargo/ciborium-0.2.2.tar.gz) = Quaf/W8JF/XAKSVqJNAWHbF86jmX0YXbDTWSYwh3Dw4=
 SHA256 (cargo/ciborium-io-0.2.2.tar.gz) = Ba/qHgoGyb4z1Tm4dvHONpL0r+ostB90DndDIl7Rx1c=
 SHA256 (cargo/ciborium-ll-0.2.2.tar.gz) = V2Y7ZT2UijOL+z7rqbsv1fz67Lnhmeh+HtpNnoskD9k=
-SHA256 (cargo/clap-4.6.5.tar.gz) = MBtWZYWY5I82SGR6xvyIe+fnEI7d+k6bY/zz7FjAyt8=
-SHA256 (cargo/clap_builder-4.6.5.tar.gz) = lKZUA9GhvSj33GjrhQboh0gI7l7stZKY3liOLhQHoHg=
+SHA256 (cargo/clap-4.6.6.tar.gz) = Rzx+B/QJqNdyFhckqo22p2WiUypw+WZ+63tJ09Avvco=
+SHA256 (cargo/clap_builder-4.6.6.tar.gz) = e0j+paiOmucooty+2/wOcw99YNpC4csEmoPJ+4t4mIk=
 SHA256 (cargo/clap_complete-4.5.58.tar.gz) = db8LMq0uFS3nibtjXqTTB49rg4rXl0FD6ZuZ9FoEr0o=
 SHA256 (cargo/clap_complete_command-0.6.1.tar.gz) = 2o4ZjAUjFWhtNjceijxXeLeFL8dcwxPk4R7remRKG2I=
 SHA256 (cargo/clap_complete_nushell-4.5.8.tar.gz) = CgyVFpRpHmW/nUIdWX1oQWwi3pYy6ITChBLLjNi3Pc4=
@@ -134,8 +134,8 @@ SHA256 (cargo/futures-task-0.3.32.tar.gz
 SHA256 (cargo/futures-util-0.3.32.tar.gz) = OJykEpbmGQtIBT3gMh0Cp38y+KXSRh3Th2LAWTgFxtY=
 SHA256 (cargo/gen-lsp-types-0.11.0.tar.gz) = tkiHrDqAg0J66TWnKW24docVgs1X6sB3Vk+LwY+kkRY=
 SHA256 (cargo/generic-array-0.14.7.tar.gz) = hWScpR/XInLXghra8nStkcKIJ3cT2cGIINhJmn/2npo=
-SHA256 (cargo/get-size-derive2-0.10.3.tar.gz) = xzbSJsMuSWuDd4E7UiaeEa06SNg3O2iGLQNk8E/RIp0=
-SHA256 (cargo/get-size2-0.10.3.tar.gz) = tBHzRBgwWQirFagv94lYwqmu6aJysqLmY4NrIKTkudM=
+SHA256 (cargo/get-size-derive2-0.11.0.tar.gz) = fv5G0q21KQFXSHQvGjhZQDnONX27IebReN40LPzkaNQ=
+SHA256 (cargo/get-size2-0.11.0.tar.gz) = 1NM43jkhBEF/5v2+WIxSODuSNpVtiv5WVPAHcXbtxjI=
 SHA256 (cargo/getopts-0.2.24.tar.gz) = z+T7rFA7jR+I5mdgEYhfNLcXT0blmVa7pTS6g6ve1N8=
 SHA256 (cargo/getrandom-0.2.16.tar.gz) = M1/58TXkOEyBUNbyfG2u1DNXf4a0dQQYM4wBoaJShZI=
 SHA256 (cargo/getrandom-0.3.4.tar.gz) = iZ3vXDfE/XsmZGSMKBIOzsE45NOVtFnlyjT5zOLdd/0=
@@ -313,8 +313,8 @@ SHA256 (cargo/regex-automata-0.4.18.tar.
 SHA256 (cargo/regex-lite-0.1.7.tar.gz) = lD9BMhxj7xyS/XY7/gVNJmj38iWlwp8BBZA9wvwEujA=
 SHA256 (cargo/regex-syntax-0.8.11.tar.gz) = 1vb/mjeEhbKYpShmVtpmW6dEE9NtsJeWMyddLnCBRdQ=
 SHA256 (cargo/rend-0.5.3.tar.gz) = ytre8xfC8gdVpk1/3Ej55xeO5rDh9/zjP6YPHWiiduY=
-SHA256 (cargo/rkyv-0.8.17.tar.gz) = gVzIo3FZpGMGSCUkbK2weWHiXNmIWQhgb20IqY2PiHQ=
-SHA256 (cargo/rkyv_derive-0.8.17.tar.gz) = wO0aeKGxnRhLDapindmgJFcxc+x9SFsofLNp+zYHzBw=
+SHA256 (cargo/rkyv-0.8.18.tar.gz) = 2Xdgk7fKFwRUqxQGlU97fZelfFHcbAZClX+y7yXC05k=
+SHA256 (cargo/rkyv_derive-0.8.18.tar.gz) = HCXvYErH3YOdRNZGSJUuojyXhm8ST/ZxsO0s862bsG4=
 SHA256 (cargo/ron-0.12.0.tar.gz) = /UkMWxgmGJPxREnL0oy5wLY3rr8WHNd5AL/e2v8h7DI=
 SHA256 (cargo/rust-stemmers-1.2.0.tar.gz) = 5GogNgGf24iBMdt6TIR6EGOnST+XHtlOqCxn6tpjylQ=
 SHA256 (cargo/rustc-hash-2.1.3.tar.gz) = ax5/mkKFcb4txbwFBcE/tr+TaCK4lOyHq/igik5RdC0=
@@ -373,9 +373,9 @@ SHA256 (cargo/test-case-core-3.3.1.tar.g
 SHA256 (cargo/test-case-macros-3.3.1.tar.gz) = XInnKgHtTFeWaa3VkBS5pSTWCcDIjGpYXON0hYefb/s=
 SHA256 (cargo/thin-vec-0.2.19.tar.gz) = ed7zL/zUd9sf8m922rnjqR8L1CqFypZXcImyRiMFb50=
 SHA256 (cargo/thiserror-1.0.69.tar.gz) = tqr1M5tXjqhbUOCA/rJQo+iujPzf+aRhyewpBLySP1I=
-SHA256 (cargo/thiserror-2.0.19.tar.gz) = CaQ1mIQOM9WwMx84xeMNE7sRwRIQpLWPDZsYpaXu/Nk=
+SHA256 (cargo/thiserror-2.0.20.tar.gz) = 7IYjX1/MKnNlAxB1bSrFsTileAu7364+7M7JksQ1uk8=
 SHA256 (cargo/thiserror-impl-1.0.69.tar.gz) = T+5sTvyQBZ4Q+B5tQsYKGPdliMPXTLg6CyQqK2x1BME=
-SHA256 (cargo/thiserror-impl-2.0.19.tar.gz) = Q8v+DPdhBNQqV0gChEGH6EowXlMe1URV8R+94PEFQc0=
+SHA256 (cargo/thiserror-impl-2.0.20.tar.gz) = vATNPhI23UqYr8pFafLes/Eg5UIqQCO+LLaD+Ehikq8=
 SHA256 (cargo/thread_local-1.1.9.tar.gz) = 9gJGpJRPJPbgGKoXze/7eBi3Y1aWXQOwfWqYhuiWIYU=
 SHA256 (cargo/tikv-jemalloc-sys-0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7.tar.gz) = zYqlsquGos76QG2IkTnBYsuyMAkvfR18vBcWQF2FKjs=
 SHA256 (cargo/tikv-jemallocator-0.6.1.tar.gz) = A1m0Mn+VTgVn5p+xkc8UNmF3SIE4GclLjNSkMUItBTo=
@@ -503,7 +503,7 @@ SHA256 (cargo/zmij-1.0.10.tar.gz) = MODY
 SHA256 (cargo/zstd-0.13.3.tar.gz) = 6R7jEaVpwycXFlFWbgeXIgDnb8/iJCpPpEYUmjiBwIo=
 SHA256 (cargo/zstd-safe-7.2.4.tar.gz) = j0nE1fCrtgKpP7hzavKk9N2VEuNvf1cNZuZf+GftO50=
 SHA256 (cargo/zstd-sys-2.0.16+zstd.1.5.7.tar.gz) = keGevCrcj4PkMDnnl3bj/ajKkZEy1oof7WpfrKJoN0g=
-SHA256 (ruff-0.16.6.tar.gz) = jKRyFJIjEgfZmyd+xda9zFs+Ww5lCO4yJQuZeWt3obw=
+SHA256 (ruff-0.16.7.tar.gz) = wxFNuCfdlHqpZgM4cxjqAJnGXG2Iq7JwT55j/BFAcJc=
 SIZE (cargo/adler2-2.0.1.tar.gz) = 13366
 SIZE (cargo/aho-corasick-1.1.5.tar.gz) = 184315
 SIZE (cargo/alloca-0.4.0.tar.gz) = 4257
@@ -552,13 +552,13 @@ SIZE (cargo/cc-1.2.65.tar.gz) = 95435
 SIZE (cargo/cfg-if-1.0.4.tar.gz) = 9360
 SIZE (cargo/cfg_aliases-0.2.1.tar.gz) = 6355
 SIZE (cargo/chacha20-0.10.0.tar.gz) = 38763
-SIZE (cargo/char_str-0.0.2.tar.gz) = 69007
+SIZE (cargo/char_str-0.0.4.tar.gz) = 71301
 SIZE (cargo/chrono-0.4.44.tar.gz) = 240549
 SIZE (cargo/ciborium-0.2.2.tar.gz) = 35611
 SIZE (cargo/ciborium-io-0.2.2.tar.gz) = 6697
 SIZE (cargo/ciborium-ll-0.2.2.tar.gz) = 14695
-SIZE (cargo/clap-4.6.5.tar.gz) = 64483
-SIZE (cargo/clap_builder-4.6.5.tar.gz) = 171746
+SIZE (cargo/clap-4.6.6.tar.gz) = 64815
+SIZE (cargo/clap_builder-4.6.6.tar.gz) = 171756
 SIZE (cargo/clap_complete-4.5.58.tar.gz) = 48645
 SIZE (cargo/clap_complete_command-0.6.1.tar.gz) = 7959
 SIZE (cargo/clap_complete_nushell-4.5.8.tar.gz) = 35171
@@ -640,8 +640,8 @@ SIZE (cargo/futures-task-0.3.32.tar.gz) 
 SIZE (cargo/futures-util-0.3.32.tar.gz) = 168797
 SIZE (cargo/gen-lsp-types-0.11.0.tar.gz) = 98362
 SIZE (cargo/generic-array-0.14.7.tar.gz) = 15950
-SIZE (cargo/get-size-derive2-0.10.3.tar.gz) = 8774
-SIZE (cargo/get-size2-0.10.3.tar.gz) = 27893
+SIZE (cargo/get-size-derive2-0.11.0.tar.gz) = 9306
+SIZE (cargo/get-size2-0.11.0.tar.gz) = 28779
 SIZE (cargo/getopts-0.2.24.tar.gz) = 21467
 SIZE (cargo/getrandom-0.2.16.tar.gz) = 40163
 SIZE (cargo/getrandom-0.3.4.tar.gz) = 50932
@@ -819,8 +819,8 @@ SIZE (cargo/regex-automata-0.4.18.tar.gz
 SIZE (cargo/regex-lite-0.1.7.tar.gz) = 96903
 SIZE (cargo/regex-syntax-0.8.11.tar.gz) = 359055
 SIZE (cargo/rend-0.5.3.tar.gz) = 15823
-SIZE (cargo/rkyv-0.8.17.tar.gz) = 171033
-SIZE (cargo/rkyv_derive-0.8.17.tar.gz) = 22642
+SIZE (cargo/rkyv-0.8.18.tar.gz) = 171176
+SIZE (cargo/rkyv_derive-0.8.18.tar.gz) = 22643
 SIZE (cargo/ron-0.12.0.tar.gz) = 119892
 SIZE (cargo/rust-stemmers-1.2.0.tar.gz) = 2351301
 SIZE (cargo/rustc-hash-2.1.3.tar.gz) = 14811
@@ -879,9 +879,9 @@ SIZE (cargo/test-case-core-3.3.1.tar.gz)
 SIZE (cargo/test-case-macros-3.3.1.tar.gz) = 4961
 SIZE (cargo/thin-vec-0.2.19.tar.gz) = 39711
 SIZE (cargo/thiserror-1.0.69.tar.gz) = 22198
-SIZE (cargo/thiserror-2.0.19.tar.gz) = 29026
+SIZE (cargo/thiserror-2.0.20.tar.gz) = 28969
 SIZE (cargo/thiserror-impl-1.0.69.tar.gz) = 18365
-SIZE (cargo/thiserror-impl-2.0.19.tar.gz) = 21408
+SIZE (cargo/thiserror-impl-2.0.20.tar.gz) = 21436
 SIZE (cargo/thread_local-1.1.9.tar.gz) = 19315
 SIZE (cargo/tikv-jemalloc-sys-0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7.tar.gz) = 900826
 SIZE (cargo/tikv-jemallocator-0.6.1.tar.gz) = 14074
@@ -1009,4 +1009,4 @@ SIZE (cargo/zmij-1.0.10.tar.gz) = 22288
 SIZE (cargo/zstd-0.13.3.tar.gz) = 30514
 SIZE (cargo/zstd-safe-7.2.4.tar.gz) = 29350
 SIZE (cargo/zstd-sys-2.0.16+zstd.1.5.7.tar.gz) = 775620
-SIZE (ruff-0.16.6.tar.gz) = 13482468
+SIZE (ruff-0.16.7.tar.gz) = 13601619
Index: patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch64_armasm_asm
===================================================================
RCS file: patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch64_armasm_asm
diff -N patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch64_armasm_asm
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch64_armasm_asm	14 Sep 2026 16:14:25 -0000
@@ -0,0 +1,38 @@
+Missing BTI landing pads
+https://github.com/rust-lang/stacker/pull/81
+
+Index: modcargo-crates/psm-0.1.32/src/arch/aarch64_armasm.asm
+--- modcargo-crates/psm-0.1.32/src/arch/aarch64_armasm.asm.orig
++++ modcargo-crates/psm-0.1.32/src/arch/aarch64_armasm.asm
+@@ -3,6 +3,7 @@
+     GLOBAL |rust_psm_stack_direction|
+     ALIGN 4
+ |rust_psm_stack_direction| PROC
++    bti c
+     orr w0, wzr, #2
+     ret
+     ENDP
+@@ -11,6 +12,7 @@
+     GLOBAL |rust_psm_stack_pointer|
+     ALIGN 4
+ |rust_psm_stack_pointer| PROC
++    bti c
+     mov x0, sp
+     ret
+     ENDP
+@@ -19,6 +21,7 @@
+     GLOBAL |rust_psm_replace_stack|
+     ALIGN 4
+ |rust_psm_replace_stack| PROC
++    bti c
+     mov sp, x2
+     br x1
+     ENDP
+@@ -26,6 +29,7 @@
+     GLOBAL |rust_psm_on_stack|
+     ALIGN 4
+ |rust_psm_on_stack| PROC
++    bti c
+     stp x29, x30, [sp, #-16]!
+     mov x29, sp
+     mov sp, x3
Index: patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch_aapcs64_s
===================================================================
RCS file: patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch_aapcs64_s
diff -N patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch_aapcs64_s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modcargo-crates_psm-0_1_32_src_arch_aarch_aapcs64_s	14 Sep 2026 16:14:25 -0000
@@ -0,0 +1,38 @@
+Missing bti landing pads
+https://github.com/rust-lang/stacker/pull/81
+
+Index: modcargo-crates/psm-0.1.32/src/arch/aarch_aapcs64.s
+--- modcargo-crates/psm-0.1.32/src/arch/aarch_aapcs64.s.orig
++++ modcargo-crates/psm-0.1.32/src/arch/aarch_aapcs64.s
+@@ -33,6 +33,7 @@ TYPE(rust_psm_stack_direction)
+ FUNCTION(rust_psm_stack_direction):
+ /* extern "C" fn() -> u8 */
+ .cfi_startproc
++    bti c
+     orr w0, wzr, #STACK_DIRECTION_DESCENDING
+     ret
+ END_FUNCTION(rust_psm_stack_direction)
+@@ -45,6 +46,7 @@ TYPE(rust_psm_stack_pointer)
+ FUNCTION(rust_psm_stack_pointer):
+ /* extern "C" fn() -> *mut u8 */
+ .cfi_startproc
++    bti c
+     mov x0, sp
+     ret
+ END_FUNCTION(rust_psm_stack_pointer)
+@@ -58,6 +60,7 @@ FUNCTION(rust_psm_replace_stack):
+ /* extern "C" fn(r0: usize, r1: extern "C" fn(usize), r2: *mut u8) */
+ .cfi_startproc
+ /* All we gotta do is set the stack pointer to %rdx & tail-call the callback in %rsi */
++    bti c
+     mov sp, x2
+     br x1
+ END_FUNCTION(rust_psm_replace_stack)
+@@ -70,6 +73,7 @@ TYPE(rust_psm_on_stack)
+ FUNCTION(rust_psm_on_stack):
+ /* extern "C" fn(r0: usize, r1: usize, r2: extern "C" fn(usize, usize), r3: *mut u8) */
+ .cfi_startproc
++    bti c
+     stp x29, x30, [sp, #-16]!
+     .cfi_def_cfa sp, 16
+     mov x29, sp
Index: patches/patch-modcargo-crates_psm-0_1_32_src_arch_x86_64_s
===================================================================
RCS file: patches/patch-modcargo-crates_psm-0_1_32_src_arch_x86_64_s
diff -N patches/patch-modcargo-crates_psm-0_1_32_src_arch_x86_64_s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-modcargo-crates_psm-0_1_32_src_arch_x86_64_s	14 Sep 2026 16:14:25 -0000
@@ -0,0 +1,51 @@
+Missing ibt landing pads
+https://github.com/rust-lang/stacker/pull/81
+
+Index: modcargo-crates/psm-0.1.32/src/arch/x86_64.s
+--- modcargo-crates/psm-0.1.32/src/arch/x86_64.s.orig
++++ modcargo-crates/psm-0.1.32/src/arch/x86_64.s
+@@ -2,6 +2,12 @@
+ #include "gnu_stack_note.s"
+ /* NOTE: sysv64 calling convention is used on all x86_64 targets, including Windows! */
+ 
++#ifdef __CET__
++#include <cet.h>
++#else
++#define _CET_ENDBR
++#endif
++
+ .text
+ 
+ #if defined(CFG_TARGET_OS_darwin) || defined(CFG_TARGET_OS_macos) || defined(CFG_TARGET_OS_ios) || defined(CFG_TARGET_OS_tvos)
+@@ -27,6 +33,7 @@ TYPE(rust_psm_stack_direction)
+ FUNCTION(rust_psm_stack_direction):
+ /* extern "sysv64" fn() -> u8 (%al) */
+ .cfi_startproc
++    _CET_ENDBR
+     movb $STACK_DIRECTION_DESCENDING, %al # always descending on x86_64
+     retq
+ END_FUNCTION(rust_psm_stack_direction)
+@@ -39,6 +46,7 @@ TYPE(rust_psm_stack_pointer)
+ FUNCTION(rust_psm_stack_pointer):
+ /* extern "sysv64" fn() -> *mut u8 (%rax) */
+ .cfi_startproc
++    _CET_ENDBR
+     leaq 8(%rsp), %rax
+     retq
+ .rust_psm_stack_pointer_end:
+@@ -58,6 +66,7 @@ FUNCTION(rust_psm_replace_stack):
+     8-byte offset necessary to account for the "return" pointer that would otherwise be placed onto
+     stack with a regular call
+ */
++    _CET_ENDBR
+     leaq -8(%rdx), %rsp
+     jmpq *%rsi
+ .rust_psm_replace_stack_end:
+@@ -71,6 +80,7 @@ TYPE(rust_psm_on_stack)
+ FUNCTION(rust_psm_on_stack):
+ /* extern "sysv64" fn(%rdi: usize, %rsi: usize, %rdx: extern "sysv64" fn(usize, usize), %rcx: *mut u8) */
+ .cfi_startproc
++    _CET_ENDBR
+     pushq %rbp
+     .cfi_def_cfa %rsp, 16
+     .cfi_offset %rbp, -16

Reply via email to