feat: release v0.29.0 with RISC-V GOOBJ, debugger enhancements, and new
Test / vet (push) Successful in 47s
Test / test (push) Failing after 2m4s
Test / build (push) Skipped

CLI commands
This commit is contained in:
2026-08-05 20:08:56 +02:00
parent 49566de7fb
commit ad6e3360df
5 changed files with 89 additions and 29 deletions
+32 -24
View File
@@ -21,16 +21,19 @@ gasm lsp language server (completion, hover, symbols, diagnostics, highligh
gasm asm standalone assembler (Phase 2)
gasm verify dynamic analysis & verification (Phase 3)
gasm debug source-level debugger (Phase 4)
gasm diff compare machine code of two .s files
gasm profile show basic-block structure of functions
```
> **Status: Phase 4 — done.** Phase 1 (the language foundation,
> linter, formatter and language server) shipped in v0.1.0; Phase 2 (the
> standalone assembler — the full amd64 instruction set plus ELF, Mach-O
> and GOOBJ object emission) in v0.12.0; Phase 3 (dynamic analysis —
> JIT execution, differential testing, ABI checks and coverage profiling)
> in v0.25.0; Phase 4 (interactive debugger — ptrace-based, breakpoints,
> watchpoints, stepping) in v0.27.0; RISC-V encoder (RV64IMAFDC + RVC,
> ELF emission, ground-truth) in v0.28.0. See [Roadmap](#roadmap).
> **Status: Phase 4 — done, Phase 5 underway.** Phase 1 (the language
> foundation, linter, formatter and language server) shipped in v0.1.0;
> Phase 2 (the standalone assembler — the full amd64 instruction set plus
> ELF, Mach-O and GOOBJ object emission) in v0.12.0; Phase 3 (dynamic
> analysis — JIT execution, differential testing, ABI checks and coverage
> profiling) in v0.25.0; Phase 4 (interactive debugger — ptrace-based,
> breakpoints, watchpoints, stepping, vector register display, named buffer
> allocation) in v0.27.0; RISC-V encoder (RV64IMAFDC + RVC, ELF emission,
> ground-truth, GOOBJ) in v0.28.0–v0.29.0. See [Roadmap](#roadmap).
## Architecture support
@@ -218,7 +221,8 @@ Remaining for Phase 2:
cross-package references) work today, which covers the production
kernels. With that item deferred, the amd64 instruction set — scalar,
VEX/AVX2 and the full EVEX/AVX-512 set including GPR-interchanging
conversions — is complete.
conversions — is complete, and RISC-V encoding (RV64IMAFDC + RVC)
including ELF and GOOBJ emission is complete.
### Phase 3 — dynamic analysis · *done*
@@ -242,26 +246,28 @@ portable Go implementation every kernel is derived from.
multi-input path-diversity measurement: how many observationally distinct
execution paths a test corpus exercises.
### Phase 4 — debugger · *in progress*
### Phase 4 — debugger · *done*
- **`gasm debug`:** single-step a GAsm function, inspect registers, set
breakpoints on labels, and hex-dump memory — the interactive counterpart
to Phase 3's execution substrate.
- **`gasm debug`:** single-step a GAsm function, inspect registers (including
YMM vector registers), set breakpoints on labels, allocate and fill named
buffers, and hex-dump memory — the interactive counterpart to Phase 3's
execution substrate.
- **MVP** — *done.* ptrace-based debuggee subprocess (PTRACE_TRACEME +
LockOSThread), entry breakpoint (auto-run to function start),
single-step, register inspection, label resolution, breakpoint
management via `/proc/pid/mem`, and an interactive REPL.
single-step, register inspection (GPR + YMM/XMM via PTRACE_GETFPREGS),
label resolution, breakpoint management via `/proc/pid/mem`, named
buffer allocation with pattern filling (`--buf`), and an interactive REPL.
- **Remaining:** disassembly at PC (x86asm decode), memory-write support,
watchpoints, source-line mapping, and multi-platform support
(FreeBSD/macOS ptrace variants).
### Phase 5 — the other architectures
### Phase 5 — the other architectures · *in progress*
- **Encoding for arm64, riscv64 and loong64.** The lexer, parser, linter
and formatter already cover all four architectures; the assembler today
encodes amd64 only. Phase 5 brings the same encode-and-verify treatment
(instruction tables already generated from the toolchain, every encoding
checked byte for byte against `go tool asm`) to the remaining three.
- **RISC-V encoding — done.** RV64IMAFDC instruction set, RVC compression,
MOV pseudo-instruction, SB/global symbols (AUIPC pairs), ELF64 and GOOBJ
emission, and ground-truth verification against `go tool asm`.
- **Remaining:** arm64 and loong64 encoding, plus the same encode-and-verify
treatment for each (instruction tables already generated from the toolchain).
## Principles
@@ -293,9 +299,9 @@ portable Go implementation every kernel is derived from.
| `arch` | amd64, arm64, riscv64 and loong64 register files and instruction tables. |
| `lint` | Conservative static checks. |
| `format` | A canonical formatter — `gofmt` for assembly. |
| `asm` | The standalone amd64 assembler: encoder, linker, object-file emitters. |
| `verify` | JIT execution substrate for dynamic analysis (Phase 3). |
| `debug` | Interactive ptrace debugger for amd64 (Phase 4). |
| `asm` | The standalone assembler: amd64 and RISC-V encoders, linker, object-file emitters (ELF, Mach-O, GOOBJ). |
| `verify` | JIT execution substrate for dynamic analysis, combined ABI+fuzz differential testing (Phase 3). |
| `debug` | Interactive ptrace debugger with GPR/YMM register display and named buffer allocation (Phase 4). |
| `lsp` | Language Server Protocol server. |
| `cmd/gasm` | The `gasm` binary tying it all together. |
| `_gen` | The generator that rebuilds the instruction tables from the Go toolchain. |
@@ -330,6 +336,8 @@ gasm asm --format elf -o k.o k.s # assemble to a linkable ELF object
gasm verify kernel_amd64.s # JIT-load and report functions
gasm verify --ground-truth k.s # byte-for-byte vs go tool asm
gasm debug --func name k.s # interactive debugger
gasm diff a.s b.s # compare machine code byte-for-byte
gasm profile k.s # show basic-block structure
```
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full development workflow,