Skip to content

OctoGo v0.56.2 (preview)

Pre-release
Pre-release

Choose a tag to compare

@j-modernc-org j-modernc-org released this 16 Oct 18:52
· 25 commits to master since this release

OctoGo v0.56.2 (preview) - prebuilt binaries for linux (amd64, arm64), windows/amd64 and macOS (arm64, amd64). Unzip and put ogo on PATH; the C backend and the board loader are embedded, so there is nothing else to install. ogo help starts you off.

A correction to v0.56.1, released a few hours earlier: its notes say a 64-bit value handed to a function value arrives right. That fix was partial. v0.56.1 bound the operations and constants the fault was found with, and a widening conversion or a call's result handed there still arrived wrong, in silence. This release finishes that fix, and fixes an older silent wrong answer the fuzzer found on the way. Upgrade if a program passes int64 or uint64 values to callbacks or calls with 64-bit constants. 3 commits; every entry is in CHANGELOG.md.

Fixed

  • Wrong answers, all of them silent, measured on a P2-EDGE:
    • A widening conversion or a call's result handed to a function value as a 64-bit argument arrived with garbage in its high word: cv(int64(i32)) printed 1623844961 for 9, and cv(id(3)) and u(uint64(x)) the same, in v0.56.1 and before. Every 64-bit argument of a call through a function value is bound to a variable first now, but one that is a variable already.
    • A 64-bit constant beside an argument that does something was cut to its low word: take(1<<40, side()) printed 1 for Go's 1099511627777, through a method, an interface and a deferred call too, on the host as on the board, in every release.
  • A function value's 64-bit result reads in an operation, w(x) + 1, w(x) >> 32, u(x) % 7, which the C compiler refused.

Toolchain and verification

  • ogo smith calls through function values held in package variables, the form a checked build calls through its nil check, hands them a single 64-bit argument of every shape, and reads their 64-bit results in operations. Built by v0.56.1, every seed of the first seven carrying the new shapes fails on the board.
  • Under this release's compiler the host suite passes, and so does make board on a P2-EDGE: 1012 tests, the 971 run cases among them; fuzzer seeds 1-2000 pass on the host, and seeds 1-200 on the board but 13 that outgrow a cog's registers. p2-11, the PDP-11/40 emulator written in OctoGo, builds byte for byte as v0.56.0 built it, and its 72 tests pass on the board.

The five zips are cross-compiled from one host; see SHA256SUMS. As before, only the linux/amd64 binary has been run before publishing.