When the SCS patch was the LAST patch in ohm's cumulative, the
trailing '-- \n2.54.0\n' git-format-patch sentinel was an orphan that
patch(1) read as a malformed header — fixed in 84734ba by stripping
the trailer.
Now besser#18 (queue-pending-record-lock-bh-danctnix) is added at the
end of ohm.yaml's includes. SCS is no longer last. Without its
trailer to mark end-of-patch, patch(1) reads straight into besser#18's
'From d95453c... Mon Sep 17 00:00:00 2001' line and errors as
'malformed patch at line N: From ...'.
Restoring the trailer makes the separator unambiguous again.
Cumulative b2sum: 0eb091ddaba4a8f1c3c2a78... -> ceec602afa8574c74354...
Size: 162 704 -> 162 716 (+12 = the trailer bytes).
This rule — 'only the LAST patch must lack a trailer; all others must
keep theirs' — is sensitive to ohm.yaml include ordering, which is
brittle. Filed as a kernel-agent followup: ka-promote should rewrite
trailers automatically (always add to non-last, always strip from
last) so source patches don't need to be ordering-aware.
xor-neon-ffixed-x18-scs-build-fix-danctnix — GCC 15.2.1 build fix
Restores -ffixed-x18 for arch/arm64/lib/xor-neon.c when
CONFIG_SHADOW_CALL_STACK=y. GCC 15.2.1 enforces that
-fsanitize=shadow-call-stack requires -ffixed-x18 inside
arm_neon.h's #pragma GCC target() push/pop blocks; CC_FLAGS_REMOVE
strips the kernel-wide -ffixed-x18 for xor-neon.o and CC_FLAGS_FPU
does not restore it.
Note on current ohm config: linux-pinetab2-danctnix-besser
config has # CONFIG_SHADOW_CALL_STACK is not set as of pkgrel=3,
which makes this patch a runtime no-op ($(if $(CONFIG_SHADOW_CALL_STACK), -ffixed-x18) evaluates to nothing). Patch is kept in the manifest as
belt-and-suspenders for the day SCS gets re-enabled (tracked in
besser issue for GCC fix monitoring).
See reference_arm64_scs_arm_neon_gcc15 for the full toolchain
analysis. This patch is the upstream-friendly Makefile fix; the
config-side SHADOW_CALL_STACK=n workaround is the immediate
runtime mitigation. Both are present in pkgrel=3 for safety.