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. To reproduce: $ echo 'print("boo")' > boo.py $ ruff check boo.py Illegal instruction (core dumped) 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 12 Sep 2026 16:20:08 -0000 @@ -4,6 +4,7 @@ NOT_FOR_ARCHS = sparc64 COMMENT = Python linter and code formatter MODPY_DISTV = 0.16.6 +REVISION = 0 GH_ACCOUNT = astral-sh GH_PROJECT = ruff 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 12 Sep 2026 15:58: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 12 Sep 2026 15:58:36 -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 12 Sep 2026 16:31:47 -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
