All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.3.0 - 2026-10-15
armhf, a 32-bit ARM hard-float ABI (AAPCS-VFP).__ARM_PCS_VFPselects it. Soft-float staysarm32. CI and the release archive includelib/armhf.docs/platform-abi.md, the current contract for switching and register spills.docs/abi-register-audit.mdremains the historical record of that audit.test_09checks that the caller's rounding mode survivesstackman_switch, including a switch onto a saved stack. Soft-floatarm32does not spillFPSCR, and the test expects the callback's mode to remain.- FreeBSD, OpenBSD and NetBSD (amd64,
sysv_amd64ABI) are built and tested on every commit by abuild and test bsdworkflow.
stackman_switchspills floating-point control and status state and reloads it after the restore callback.stackman_calldoes not touch those registers.armhfspills the wholeFPSCR.aarch64anddarwin_arm64spillFPCRandFPSR.win_arm64spillsFPSRas well asFPCR.riscv64spills the wholefcsr.sysv_i386spills the x87 control word.win_x64spillsMXCSR.win_x86spills the x87 control word andMXCSR, so older compilers that emit x87 and current MSVC, which emits SSE2, each keep their rounding mode.- Softfp (
-mfloat-abi=softfp) is not a supported platform. That build selectsarm32and does not preserveFPSCR. - CI test steps stop after one minute.
test_04allocates 8KB for thestackman_callstack. Two MSVC Debug (/ZI) frames of the recursive callback overflowed a 1KB block into the heap header, so the x64 test failed intermittently.- RISC-V
stackman_callleaves a null stack unchanged and passes the previous stack pointer to the callback. - Windows ARM64 no longer uses the live TEB register
x18as a scratch instackman_switchorstackman_call. - AArch64
stackman_switchkeeps the frame pointer attached across a stack switch, and the unwind info covers theFPCRslot. - ABI detection now works on the BSDs:
tools/abiname.shused amktemptemplate with threeXs, which BSDmktemp(1)rejects.
- Leftover Windows ARM32 sources, Visual Studio configurations, and
lib/win_arm. Version 1.0.0 had already dropped that platform.
1.2.5 - 2026-06-23
- macOS release libraries now use per-architecture deployment targets:
10.13for Intel and11.0for Apple Silicon.
1.2.4 - 2026-06-23
- macOS release libraries are built with
MACOSX_DEPLOYMENT_TARGET=14.0so they are not tagged with the runner's current macOS version.
1.2.3 - 2026-06-06
- Added explicit
STACKMAN_ABIoverride support in the Makefile and ABI probe script for deterministic cross-build packaging
- Normalized Windows ARM64 ABI naming to
win_arm64and kept compatibility mapping for legacywin_aarch64inputs - ABI probe diagnostics now query compiler target triple and emit clearer mismatch guidance when target intent is not fully propagated through wrapper/toolchain settings
- Target triple probing now prefers
CCwithCFLAGS(with fallback probing) so clang-style cross-target flags are reflected in secondary detection
1.2.2 - 2026-06-05
- Windows MSVC library projects now compile with
/Zlto omit embedded default runtime library directives from generated object files - Windows static libraries no longer carry
/DEFAULTLIB:"MSVCRTD"metadata, reducing unintended CRT coupling for downstream linkers
1.2.1 - 2026-05-09
- CI: pinned Windows runner to
windows-2022(fromwindows-latest) to keep VS2022 v143 toolset availability stable for ARM64 builds
- Fixed amd64 (sysv_amd64 GCC) restore callback stack-pointer argument to pass the active switched stack pointer
- Added assertion coverage in
tests/test.cto detect incorrect restore callback stack pointer on amd64
1.2.0 - 2025-11-16
- RISC-V platform support
riscv64- RISC-V 64-bit (LP64D ABI with hardware double-precision floating point)
- Platform detection for RISC-V in
platforms/platform.husing__riscvand__riscv_xlenmacros - Assembly implementation in
platforms/switch_riscv64_gcc.S- Full register preservation (s0-s11, fs0-fs11, ra)
- 16-byte stack alignment per RISC-V ABI
- Both
stackman_switchandstackman_callfunctions
- RISC-V build job in CI workflow with qemu-riscv64 emulation
- RISC-V library included in release archives
- Release archives now contain 10 platform libraries (was 9)
1.1.0 - 2025-11-16
- macOS platform support
darwin_x86_64- macOS on Intel (x86_64)darwin_arm64- macOS on Apple Silicon (ARM64)
- Platform detection for macOS in
platforms/platform.husing__APPLE__and__aarch64__macros - Mach-O assembly compatibility for both x86_64 and ARM64
- Conditional assembly macros for ELF vs Mach-O object formats
- Disabled CFI directives on macOS (different semantics than Linux)
- Symbol name mangling with leading underscore for Mach-O
- macOS build jobs in CI workflow (macos-15-intel and macos-latest runners)
- macOS libraries included in release archives
- Assembly files (
switch_x86_64_gcc.S,switch_aarch64_gcc.S) now support both Linux (ELF) and macOS (Mach-O) Makefiledetects Darwin and disables-staticflag (not supported on macOS)tools/abiname.shimproved to handle stale temp files on macOS- Release archives now contain 9 platform libraries (was 7)
- CFI macro definitions in
switch_aarch64_gcc.Sfor Linux builds
1.0.1 - 2025-11-16
- Disabled automatic library commits to repository
- Pre-built libraries now available exclusively via GitHub Releases
- Added
lib/README.mddocumenting deprecation timeline
lib/directory in repository - will be removed in v2.0.0- Committing binary library files to git (causes bloat and merge conflicts)
1.0.0 - 2025-11-16
- Version macros in
stackman.h:STACKMAN_VERSION_MAJOR,STACKMAN_VERSION_MINOR,STACKMAN_VERSION_PATCH,STACKMAN_VERSION,STACKMAN_VERSION_NUMBER - Automated release workflow for tagged versions
- Updated GitHub Actions to v4 (from v2)
- README updated with complete platform list, CI information, and release documentation
- BREAKING: Dropped Windows ARM32 (win_arm) support
- Microsoft Windows SDK 10.0.26100.0+ no longer supports 32-bit ARM development
- Last SDK version supporting ARM32 was Windows SDK 10.0.22621 (Windows 11 SDK, version 22H2)
- ARM32 Windows devices (Windows RT) are obsolete
- ARM64 Windows remains fully supported
- Fixed typos in documentation and source files
- Corrected "callee-stored" → "callee-saved" terminology
0.2 - 2024-2025
- Updated to VS2022 project files
- Updated GitHub Actions dependencies
- Automated library builds committed to repository
0.1 - 2020-05-18
- Core stack manipulation API:
stackman_switch()andstackman_call() - Support for 8 platforms:
- Linux: sysv_amd64, sysv_i386, arm32 (AAPCS), aarch64 (AAPCS64)
- Windows: win_x86, win_x64, win_arm (32-bit ARM), win_arm64
- Compiler support: GCC, Clang, MSVC (VS2017, VS2019, VS2022)
- Pre-built libraries for all supported platforms
- Inline assembly and separate assembly file options
- Cross-compilation support for Linux (x86, ARM32, ARM64)
- QEMU-based testing for ARM platforms in CI
- Comprehensive test suite (test.c, test_cc.cc, test_static.c, test_asm.c)
- GitHub Actions CI for automated building and testing
- Visual Studio project files (VS2017, VS2019, VS2022)