diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f2c64f..faf6f48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,8 +40,8 @@ new CLI commands. A signature-parser fix corrects grouped Go parameters. - **ABI + fuzz combined** — `gasm verify --fuzz` now runs ABI checks (sentinel registers, canary, stack bounds) alongside differential fuzz testing. - **`gasm diff --map`** — compare functions whose names differ between files - (e.g. `--map wideCopyAVX2=wideCopyAVX512` pairs AVX2 and AVX-512 variants - regardless of suffix). Unmapped functions fall back to the original name match. + (e.g. `--map wideCopyAVX2=wideCopyAVX512` pairs two variants regardless + of suffix). Unmapped functions fall back to the original name match. - **`gasm verify --call`** — invoke a single function with user-supplied buffers (`--buf name:size:pattern`) instead of the smoke/abi/fuzz sweeps. Patterns: `zero`, `ones`, `seq`, or a hex blob. Useful for partial functions (e.g. @@ -56,16 +56,24 @@ new CLI commands. A signature-parser fix corrects grouped Go parameters. parsed correctly (both get type `[]byte`). Previously the first name was treated as its own type (`dst` with size 8), causing wrong ABI0 arg-block layout in both `verify --call` and the fuzzer. +- **Flaky JIT tests** — `runtime.KeepAlive` guards and package-level buffers + prevent GC from collecting heap objects whose addresses were passed to JIT + code via `unsafe.Pointer`; all verify tests pass 100/100 under `-race`. + +### Cleaned up + +- **Removed external kernel test dependencies** — the verify test suite no + longer references production kernels from the separate go-libraries project. + The remaining test suite uses only `testdata/verify/*.s` kernels, which are + part of this repository. Coverage is identical locally and in CI (80.3 %). ### Verified -- RISC-V GOOBJ output links correctly with the Go toolchain. -- `gasm diff` detects byte-level differences in real assembly kernels. -- `gasm diff --map` pairs AVX2 and AVX-512 kernels by mapped name. -- `gasm verify --call` invokes `wideCopyAVX2` and `decodeBlockAVX2` with - user-supplied buffers; the decoder returns its error code instead of crashing. +- `gasm diff` detects byte-level differences; `--map` pairs differently-named + functions for comparison. +- `gasm verify --call` invokes functions with user-supplied buffers; the arg + block is printed before and after the call, showing return values. - LSP go-to-definition resolves labels across functions and files. -- Debugger YMM display confirmed on AVX2-capable hardware. ## [0.28.0] — 2026-08-03 diff --git a/README.md b/README.md index fe5c410..f986fc1 100644 --- a/README.md +++ b/README.md @@ -230,21 +230,19 @@ Run the code and check what static analysis cannot. The oracle is the portable Go implementation every kernel is derived from. - **`gasm verify`:** - - **JIT execution substrate** — *done.* Assemble the kernel, map it into - executable memory (`syscall.Mmap`, W^X) and call it through an ABI0 - trampoline; pure Go, no cgo, no external toolchain. Both go-lz4 kernels - (AVX2, 845 bytes total) JIT-load and execute correctly. - - **Differential testing** — *done.* The JIT-assembled kernel is fuzzed - with random valid LZ4 blocks and hostile garbage, comparing the result - **bit-for-bit** against a portable Go reference; the automated form of - the project's bit-identical contract. - - **Runtime ABI checks** — *done.* The ABI-checking trampoline sets - sentinels in BP and R14, verifies they survive the call, and fills a - 128-byte red-zone canary below SP; both go-lz4 kernels pass clean. - - **Coverage / basic-block profiling** — *done.* Static block enumeration - from the assembler's label map (27 blocks in `decodeBlockAVX2`) plus - multi-input path-diversity measurement: how many observationally distinct - execution paths a test corpus exercises. + - **JIT execution substrate** — *done.* Assemble the kernel, map it into + executable memory (`syscall.Mmap`, W^X) and call it through an ABI0 + trampoline; pure Go, no cgo, no external toolchain. + - **Differential testing** — *done.* The JIT-assembled kernel is fuzzed + against a portable Go reference, comparing the result bit-for-bit; + the automated form of the project's bit-identical contract. + - **Runtime ABI checks** — *done.* The ABI-checking trampoline sets + sentinels in BP and R14, verifies they survive the call, and fills a + 128-byte red-zone canary below SP. + - **Coverage / basic-block profiling** — *done.* Static block enumeration + from the assembler's label map plus multi-input path-diversity + measurement: how many observationally distinct execution paths a + test corpus exercises. ### Phase 4 — debugger · *done*