docs: audit the development changelog against the release delta
Assisted-by: GLM 5.3 Flash
This commit is contained in:
+25
-33
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user