docs: sync README, CHANGELOG and docs with the current state

This commit is contained in:
2026-08-30 10:44:18 +02:00
parent 6c1c8d9d96
commit 56f8babbce
7 changed files with 407 additions and 263 deletions
+68 -2
View File
@@ -15,6 +15,14 @@ Unreleased changes on the `development` branch.
and loong64 in addition to amd64. Each architecture has its own ptrace
register access, disassembler (`golang.org/x/arch`), register display,
and stop-info handler. The REPL is fully arch-neutral.
- **Headless debugging.** `gasm debug --script` runs REPL commands from a
file (or stdin) and exits; `--timeout` kills the debuggee when a run
hangs, with the watchdog armed before the ptrace attach. `--cover` runs
to completion with a breakpoint on every label and reports which blocks
executed: label-level coverage for headless test runs.
- **Conditional breakpoints.** `break <label> if <reg> <op> <val>` now also
compares two registers (`break loop if RAX > RBX`), not only a register
against an immediate.
- **JIT execution trampolines.** `verify.Call` now works on all four
architectures via hand-written assembly trampolines
(`trampoline_{arm64,riscv64,loong64}.s`) that save the Go stack, switch
@@ -22,21 +30,67 @@ Unreleased changes on the `development` branch.
- **Hardware watchpoints on all architectures.** arm64 uses DBGWVR/DBGWCR
via `PTRACE_SETREGSET` with `NT_ARM_HW_BREAK`; riscv64 and loong64 use
`PTRACE_POKEUSER` to access trigger/debug registers.
- **`gasm verify --args`.** Scalar arguments (`name=value`, decimal or
`0x` hex) can now be supplied to a `--call` invocation alongside `--buf`
buffers, closing the gap where only buffers could be supplied.
- **`gasm audit-instructions`.** Black-box diff of the amd64 encoder
against the installed `go tool asm`: superset encodings (gasm-only,
shippable via `gasm asm --format goobj`), known-but-unencodable names
(the backlog) and go-only names (feature gaps).
- **`gasm scaffold differential`.** Prints a differential test skeleton
for every `// func` signature in a kernel file: random seed states, the
kernel call and a portable reference (`<name>Portable`), compared
byte-for-byte.
- **LSP: find references** (`textDocument/references`).
- **LSP: rename symbol** (`textDocument/rename`).
- **LSP: document formatting** (`textDocument/formatting`) using the
`format` package for canonical gofmt-style output.
- **LSP: inlay hints** (`textDocument/inlayHint`) — frame size hints after
- **LSP: inlay hints** (`textDocument/inlayHint`): frame size hints after
the TEXT directive's argument area.
- **LSP: workspace symbol search** (`workspace/symbol`): substring search
over the TEXT functions and GLOBL/DATA symbols of every open document.
- **LSP: code actions.** Quick fixes for `missing-ret` (insert the RET)
and `unused-label` (remove the label) diagnostics.
- **LSP: signature help** (`textDocument/signatureHelp`): the callee's
`// func` signature while the cursor is on a `CALL`.
- **LSP: document highlights**: every reference to the function or label
under the cursor is highlighted.
- **Lint: `unused-label` rule.** Flags labels that are defined but never
referenced by any jump (Hint severity).
- **Lint: `invalid-textflag` rule.** Flags TEXT/GLOBL flags not in the
known set from `textflag.h` (Warning severity).
- **Lint: `stack-imbalance` rule.** Tracks SP changes and flags if the
net delta at RET does not match the declared frame size.
- **Lint: `register-width-mismatch` rule.** Flags amd64 operands whose
register width does not match the width the mnemonic suffix prescribes
(for example a 32-bit register in a `MOVQ`).
- **Lint: `abi0-register-args` rule.** Flags kernels whose `// func`
parameters are never read from the FP frame (for example arguments read
from registers instead), which pass every test today and break on a
toolchain upgrade. Shipped with the Go assembler's operand-width model.
- **Lint: `nonportable-register-name` rule.** Flags the `RAX`/`EAX`-style
register aliases gasm accepts but `go tool asm` rejects, so files using
them only link through the gasm GOOBJ path.
- **Lint: `unencodable-instruction` rule.** Flags mnemonics the
architecture table knows but the encoder cannot yet emit, at edit time
instead of at assembly time.
- **DWARF5 debug sections in ELF output.** All four ELF emitters now emit
`.debug_abbrev`, `.debug_info`, `.debug_line`, and `.debug_line_str`
sections, enabling `addr2line` and GDB/LLDB source-level debugging.
sections, enabling `addr2line` and GDB/LLDB source-level debugging, and
the amd64 emitter adds a `.debug_frame` CFI section for stack unwinding.
- **amd64: legacy SSE and conversion coverage.** The encoder now handles
the legacy (non-VEX) SSE packed binaries and immediate shuffles, the
legacy SSE integer instructions and `BSWAP`, the scalar and packed
double conversions (`CVTSS2SD`, `CVTSD2SS`, `CVTPS2PD`, `CVTPD2PS`) and
the prefetch hints.
- **amd64: `VPCMP` and the full opmask set.** The EVEX compare with an
opmask destination and the remaining opmask-register instructions are
encoded, byte for byte against the Go assembler.
### Changed
- **Parallel verify sweeps.** The `-smoke` and `-abi` per-function checks
now run in parallel instead of sequentially.
### Fixed
@@ -48,6 +102,18 @@ Unreleased changes on the `development` branch.
`AssembleFileLOONG64`, and `AssembleFileARM64` now mark external
relocations and populate `img.Externals`, enabling cross-package symbol
resolution in GOOBJ output.
- **Subprocess-isolated smoke and ABI sweeps.** A function that faults
during the `-smoke` or `-abi` sweep is reported without killing the
parent; each sweep runs in a child process.
- **`BSF`, `BSR` and `POPCNT` encodings.** Corrected to the bytes
`go tool asm` emits.
- **`MOVQ` immediates.** Compressed to the toolchain's imm32 forms.
- **Frame adjustments of 128 to 255 bytes.** Now use the imm8 `ADDQ`
stack adjustment.
- **amd64 encoding parity.** A broad pass aligned the remaining encoder
outputs and operand strictness with `go tool asm`.
- **`gasm scaffold` parameter names.** Shared parameter names and
two-sided seed sets in the generated skeleton are now correct.
- **asm help text.** Updated to list arm64 as a supported architecture.
## [0.31.1] — 2026-08-20