-
v0.29.0
StableTest / vet (push) Successful in 43sRelease / build (amd64, linux) (push) Successful in 41sRelease / build (arm64, linux) (push) Successful in 38sRelease / build (loong64, linux) (push) Successful in 39sRelease / build (riscv64, linux) (push) Successful in 38sTest / test (push) Successful in 1m58sRelease / release (push) Successful in 18sTest / build (push) Successful in 37sreleased this
2026-08-07 19:34:09 +00:00 | 221 commits to main since this releaseRISC-V GOOBJ emission, YMM vector register display, named buffer allocation
in the debugger, two new CLI commands (diff,profile), go-to-definition in
the LSP, combined ABI+fuzz verification, and did-you-mean label suggestions.
A--mapflag fordiffand--call/--bufflags forverifyextend the
new CLI commands. A signature-parser fix corrects grouped Go parameters.Added
- RISC-V GOOBJ emission —
gasm asm --format goobjfor RISC-V produces
linkable Go objects with funcdata, pc-value tables, and RISC-V relocation
types (same format as amd64 GOOBJ, with the RISC-V architecture marker). gasm diff— compare the machine code of two assembly files byte-for-byte;
shows which functions differ and the first few differing bytes.gasm profile— show the basic-block structure of each function: labels,
offsets, frame size, and NOSPLIT flag.- LSP go-to-definition —
textDocument/definitionnavigates from a label
reference to its definition. - did-you-mean — when the RISC-V assembler encounters an undefined label, it
suggests the closest existing label using Levenshtein distance. - YMM vector register display —
regsin the debugger now shows YMM
registers viaPTRACE_GETFPREGS(falls back to XMM when XSAVE is unavailable). - Named buffer allocation —
gasm debug --buf name:size:patternallocates
buffers in the debuggee filled withzero,ones,seq, or a hex pattern;
buffer pointers are placed into the argument block at the matching positions. - Crash input storage —
FuzzResult.CrashInputstores the input that caused
a crash or mismatch for reproducibility. - ABI + fuzz combined —
gasm verify --fuzznow runs ABI checks (sentinel
registers, canary, stack bounds) alongside differential fuzz testing. gasm diff --map— compare functions whose names differ between files
(e.g.--map wideCopyAVX2=wideCopyAVX512pairs two variants regardless
of suffix). Unmapped functions fall back to the original name match.gasm verify --call— invoke a single function with user-supplied buffers
(--buf name:size:pattern) instead of the smoke/abi/fuzz sweeps. Patterns:
zero,ones,seq, or a hex blob. Useful for partial functions (e.g.
decoders) that crash on random input but should succeed on valid data.
The arg block is printed before and after the call, showing return values.gasm verify --ground-truthnow documented in--help(was already a flag,
just missing from the help text).
Fixed
- Signature parser — grouped Go parameters like
dst, src []byteare now
parsed correctly (both get type[]byte). Previously the first name was
treated as its own type (dstwith size 8), causing wrong ABI0 arg-block
layout in bothverify --calland the fuzzer. - Flaky JIT tests —
runtime.KeepAliveguards and package-level buffers
prevent GC from collecting heap objects whose addresses were passed to JIT
code viaunsafe.Pointer; all verify tests pass 100/100 under-race.
Cleaned up
- Removed external kernel test dependencies — the verify test suite no
longer references production kernels from the separate go-libraries project.
The remaining test suite uses onlytestdata/verify/*.skernels, which are
part of this repository. Coverage is identical locally and in CI (80.3 %).
Verified
gasm diffdetects byte-level differences;--mappairs differently-named
functions for comparison.gasm verify --callinvokes functions with user-supplied buffers; the arg
block is printed before and after the call, showing return values.- LSP go-to-definition resolves labels across functions and files.
Downloads
- RISC-V GOOBJ emission —