• v0.33.0
    Release / build (amd64, linux) (push) Successful in 49s
    Release / build (arm64, linux) (push) Successful in 43s
    Release / build (loong64, linux) (push) Successful in 46s
    Release / build (riscv64, linux) (push) Successful in 45s
    Test / vet (push) Successful in 47s
    Release / release (push) Successful in 18s
    Test / test (push) Successful in 2m39s
    Test / build (push) Successful in 43s
    Stable

    petrbalvin released this 2026-09-14 21:36:25 +00:00 | 110 commits to main since this release

    Added

    • Stack-split guards in gasm asm. Every framed function now gets
      the morestack prologue check and the trailing morestack block
      (CALL runtime.morestack_noctxt), byte-identical to the toolchain's
      stacksplit output on all four architectures: the small, medium and
      big frame classes, auto-NOSPLIT leaves, the materialised constants of
      large frames (arm64 R27, riscv64 X31, loong64 R30) and the
      arm64 extrasize rule. Assembled objects are therefore linkable for
      split functions, not only NOSPLIT leaves.
    • gasm dis. Standalone disassembly through golang.org/x/arch:
      a .s file is assembled and listed per TEXT function with local
      labels at their real offsets, or raw bytes from a file or stdin are
      disassembled linearly (-a selects the architecture). The debugger
      shares the same decoder instead of carrying its own.
    • gasm fmt -l and -d. Check mode lists files whose formatting
      differs; diff mode prints a unified diff from the project's own
      LCS-based differ, with GNU header semantics.
    • LSP cross-file navigation. Go-to-definition and find references
      fall back from local labels to the TEXT functions of every open
      document, and rename follows the same cross-file matching.
    • Large frame offsets on riscv64 and arm64. Frame-relative loads
      and stores beyond the signed 12-bit immediate range materialise the
      address through the toolchain temp register (riscv64 X31, arm64
      R27) instead of silently truncating the offset (riscv64) or
      rejecting the instruction (arm64); arm64 frame sizes now add the
      toolchain's extrasize exactly (+8 when the frame leaves an alignment
      gap, +16 when it is already aligned).
    • Tail calls JMP sym(SB) on all four architectures (amd64 E9,
      arm64 B, riscv64 JAL X0, loong64 B) with the call relocation.
    • Live oracle-parity tests. Kernel files covering every guard
      class, large-offset pattern and tail call are assembled by gasm and
      by the installed go tool asm and compared byte-for-byte on all four
      architectures, alongside the existing pinned-byte tests.

    Fixed

    • The v0.32.0 review findings: the parser rejects malformed TEXT
      frames and parses signed frame sizes; amd64 frame adjustments above
      127 bytes encode with imm32; arm64 and loong64 relocation encodings
      match the toolchain; the linter guards unnamed TEXT directives and
      refreshes its textflag table; the LSP recovers from handler panics
      and decodes client URIs; watchpoint slot state moved into the debug
      session; dead verify code removed; em and en dashes replaced across
      sources.
    • gasm asm --format goobj: internal calls to TEXT symbols of the
      same file resolve on every architecture (the reference check accepted
      only the amd64 call kind).
    • gasm asm --format elf on loong64: branch relocations now map to
      R_LARCH_B26 instead of falling into R_LARCH_PCALA_HI20.
    • arm64 large-prologue ADD/SUB use the extended-register encoding
      the toolchain picks, and the morestack block saves the link register
      with the toolchain's OR form on loong64.
    Downloads