The '-- \n2.54.0\n\n' trailer added in989b884was wrong. The underlying problem was the malformed @@ hunk counts (off by 1 in both old and new), fixed ina840f76. With correct @@ counts, patch(1) processes the hunk fully and then sees the orphan trailer at EOF — which it tries to parse as the start of a new patch header ('malformed patch at line N: 2.54.0'). The original (no-trailer) shape works correctly in the concatenated cumulative as long as the @@ counts are right. Removing the trailer brings the file back to the original 1562-byte size and the cumulative b2sum to 334c37b5d37067982bd9... (size unchanged 157 458 -> 157 446 since the 12 byte trailer is gone). Lesson for ka-promote: when concatenating patches as a stream for patch(1), the LAST patch must not carry a trailing '-- \n<version>\n' sentinel — the previous patches' sentinels are fine because they are followed by 'From <sha>' headers that patch(1) recognises as the next patch boundary. Documented in series-dir README as a gotcha.
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.