feat: release v0.29.0 with RISC-V GOOBJ, debugger enhancements, and new
CLI commands
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user