v0.20260802.0-rc.1
Pre-release
Pre-release
Release candidate: this build is for evaluation and compatibility testing.
It is unsigned and not production-ready.
C2Go Toolchain v0.20260802.0-rc.1 fixes an AArch64 return-address
corruption that could crash generated Go assembly on Linux arm64.
Changes from v0.20260801.0-rc.2
- The AArch64 backend now reserves the link register (
LR/X30) during
register allocation for every c2go-mode function. - LLVM leaf functions can no longer allocate
LRas scratch. Go's arm64
assembler decides leaf status from calls and does not restore a leaf's link
register, so the old output could makeRETbranch to scratch data. - The failure was reproduced in c2go-libc's large-angle trigonometric path:
sincalled__rem_pio2_large, whose generated leaf body overwroteR30
with a stack address. - Darwin and Linux arm64 c2go-libc assembly was regenerated. The generation
script now rejects any explicitR30allocation before artifacts can be
committed or released. - A register-pressure regression test proves that the old backend allocates
R30and the corrected backend spills instead. - c2go-bind and the c2go musl fork are unchanged from the preceding candidate.
Validation before tagging
- 23/23 AArch64 c2go LLVM code-generation tests passed.
go test ./...passed with Go 1.25.9 on Darwin arm64.- Linux arm64
TestSinpassed 100 consecutive runs in a native arm64
container. - The root c2go-libc package,
dl, andselftesttest binaries all passed in
a Linux arm64 Debian container. - Explicit
R30occurrences in generated c2go-libc assembly changed from 501
to 0 on Linux arm64 and from 340 to 0 on Darwin arm64.
The tagged release workflow rebuilds and tests all supported release targets.
Locked snapshot
| Item | Version or revision |
|---|---|
| c2go-clang | LLVM 22.1.7; 3d7c5511c233603f324cde96ca7bda860ffc3049 |
| c2go-bind | 12759ab5ae6c7a71045e7768369c55b7e7bda477 |
| c2go-libc | ebc702b05c1daf50a22e343f2b08c8c8d0ac996d |
| c2go musl fork | a31facd31f63ac569a39f8796b7e5c1494892f1e |
| Supported Go line | >= 1.25.0, < 1.26.0 |
| Release builder Go | 1.25.9 |
| C2Go ABI epoch | 1 |
Pin the matching Go runtime module:
go get github.com/c2gohq/c2go_libc@v0.20260802.0-rc.1Assets
c2go-toolchain-v0.20260802.0-rc.1-linux-amd64.tar.gzc2go-toolchain-v0.20260802.0-rc.1-linux-arm64.tar.gzc2go-toolchain-v0.20260802.0-rc.1-windows-amd64.zipc2go-toolchain-v0.20260802.0-rc.1-macos-arm64.tar.gzc2go-toolchain-v0.20260802.0-rc.1-source.tar.gz- one
.sha256sidecar per archive and the combinedSHA256SUMS
All binaries are unsigned. The macOS archive is not notarized, and the Windows
archive does not carry an Authenticode signature.
Known limitations and licensing
- C only; C++ and 32-bit targets are not supported.
- Go 1.25.x only; Windows has a smaller POSIX surface.
- C2Go cannot promote an escaping C stack local to the heap. Run the standalone
c2go-ltoescape audit as a separate release gate. - Interfaces and ABI details remain pre-1.0 and may change.
This aggregate contains multiple license boundaries. Preserve and review the
root and licenses/ records before use or redistribution. A commercial
agreement cannot relicense LLVM, musl, or other third-party code.