docs: sync README, CHANGELOG and docs with the current state
This commit is contained in:
+68
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user