Download raw body.
ruff: add missing CFI landing pads
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
ruff: add missing CFI landing pads