docs: audit the development changelog against the release delta

Assisted-by: GLM 5.3 Flash
This commit is contained in:
2026-08-31 12:53:36 +02:00
parent 94c4756d47
commit a0ae0e4e37
+25 -33
View File
@@ -20,9 +20,7 @@ Unreleased changes on the `development` branch.
ptrace loops have not seen hardware yet.
- **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.
hangs, with the watchdog armed before the ptrace attach.
- **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.
@@ -31,40 +29,32 @@ Unreleased changes on the `development` branch.
the hits per instruction and reports the executed instructions with
their hit counts, with the label coverage derived from the same run.
Expect the run to slow to ptrace speed.
- **Debugger reliability fixes.** The ptrace session now drains runtime
signal-delivery-stops (a Go tracee reports SIGURG preemption to the
tracer) instead of mistaking them for the launch barrier, pins the
tracer thread the fork ran on (ptrace requests from another thread fail
with ESRCH), prefers the debuggee's reported code base over an RWX scan,
and single-steps over a hit breakpoint so resuming cannot re-trap on the
same instruction. A ptrace integration test
(`debug/ptrace_integration_test.go`) drives a real session end to end.
- **FP register display on riscv64 and loong64.** The debugger `regs`
command shows the 32 FP registers plus fcsr (and fcc on loong64) via
`PTRACE_GETREGSET`, where it previously printed nothing.
`PTRACE_GETREGSET`.
- **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
to a prepared stack, and branch to the JIT function.
- **ABI checks on all architectures.** `gasm verify -abi` and the ABI
half of `-fuzz` now work on arm64, riscv64 and loong64 via
- **ABI checks on arm64, riscv64 and loong64.** `gasm verify -abi` and
the ABI half of `-fuzz` now cover the non-amd64 architectures via
per-architecture checked trampolines: sentinels planted in the
registers the Go ABI fixes across calls (amd64 `BP`/`R14`, arm64
`R29`/`R28`, riscv64 `X27`, loong64 `R22`) are verified on return and
the saved registers restored before Go code resumes, with the
below-SP canary on every architecture. The root cause of the broken
non-amd64 calls was a stack misalignment: the trampolines advanced SP
past the linkage slot while the kernels read their first argument at
SP+8. riscv64 is validated end to end under qemu-user; arm64 shares
the fix and matches the observed frame convention; loong64 stays
ground-truth-only until hardware validation (the Go runtime cannot
start under the available loong64 emulators). `verify.Load` now
assembles each file with the encoder its name suffix calls for. The
`ABIReport` fields are renamed to the architecture-neutral
`FPClobbered` and `GClobbered`.
registers the Go ABI fixes across calls (arm64 `R29`/`R28`, riscv64
`X27`, loong64 `R22`; amd64 keeps `BP`/`R14`) are verified on return
and the saved registers restored before Go code resumes, with the
below-SP canary on every architecture. loong64 kernels are verified
through the toolchain-comparison path only, pending hardware
validation of their trampoline. `verify.Load` assembles each file
with the encoder its name suffix calls for. The `ABIReport` fields
are the architecture-neutral `FPClobbered` and `GClobbered`.
- **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.
- **Cross-package GOOBJ resolution on arm64 and loong64.**
`AssembleFileARM64` and `AssembleFileLOONG64` mark external
relocations and populate `img.Externals`, so GOOBJ output from those
architectures resolves cross-package symbols like amd64 and riscv64
already do.
- **`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.
@@ -144,14 +134,18 @@ Unreleased changes on the `development` branch.
### Fixed
- **Reliable ptrace sessions.** The debugger no longer mistakes runtime
signal-delivery-stops (a Go tracee reports SIGURG preemption to the
tracer) for its launch barrier, runs every ptrace request on the thread
that forked the debuggee (requests from another thread fail with
ESRCH), prefers the debuggee's reported code base over an RWX scan, and
single-steps over a hit breakpoint so resuming cannot re-trap on the
same instruction. A ptrace integration test
(`debug/ptrace_integration_test.go`) drives a real session end to end.
- **arm64 BL relocation.** `BL sym(SB)` now records a `RelArm64Branch`
relocation instead of emitting a bare instruction with no relocation.
- **GOOBJ R_ADDRARM64 constant.** Corrected from 9 (`R_CALLARM64`) to 3
(`R_ADDRARM64`).
- **Cross-package GOOBJ resolution.** `AssembleFileRISCV`,
`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.
@@ -162,8 +156,6 @@ Unreleased changes on the `development` branch.
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