Skip to content

Releases: c2gohq/c2go_toolchain

v0.20260802.0-rc.1

v0.20260802.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Aug 06:22

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.

简体中文 release notes

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 LR as scratch. Go's arm64
    assembler decides leaf status from calls and does not restore a leaf's link
    register, so the old output could make RET branch to scratch data.
  • The failure was reproduced in c2go-libc's large-angle trigonometric path:
    sin called __rem_pio2_large, whose generated leaf body overwrote R30
    with a stack address.
  • Darwin and Linux arm64 c2go-libc assembly was regenerated. The generation
    script now rejects any explicit R30 allocation before artifacts can be
    committed or released.
  • A register-pressure regression test proves that the old backend allocates
    R30 and 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 TestSin passed 100 consecutive runs in a native arm64
    container.
  • The root c2go-libc package, dl, and selftest test binaries all passed in
    a Linux arm64 Debian container.
  • Explicit R30 occurrences 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.1

Assets

  • c2go-toolchain-v0.20260802.0-rc.1-linux-amd64.tar.gz
  • c2go-toolchain-v0.20260802.0-rc.1-linux-arm64.tar.gz
  • c2go-toolchain-v0.20260802.0-rc.1-windows-amd64.zip
  • c2go-toolchain-v0.20260802.0-rc.1-macos-arm64.tar.gz
  • c2go-toolchain-v0.20260802.0-rc.1-source.tar.gz
  • one .sha256 sidecar per archive and the combined SHA256SUMS

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-lto escape 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.