docs: state the validation status and correct claims the material contradicts
Assisted-by: DeepSeek V4.1 Flash
This commit is contained in:
+44
-35
@@ -16,8 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
JALR; loong64 accepts the raw `JIRL rd, rj, off` spelling the Go
|
||||
assembler cannot express. A frameless amd64 function containing a
|
||||
CALL now receives the toolchain's forced base-pointer frame. The
|
||||
verify trampolines join the ground-truth lists, and a lint check for
|
||||
control flow through registers and memory extends to the new forms.
|
||||
riscv64 and loong64 verify trampolines join their ground-truth lists,
|
||||
and a lint check for control flow through registers and memory extends
|
||||
to the new forms.
|
||||
- **`gasm asm -GOARCH` and `gasm diff -GOARCH`.** The target
|
||||
architecture can be named explicitly instead of inferred from the
|
||||
file-name suffix, which is how the suffix-less majority of GOROOT's
|
||||
@@ -26,37 +27,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
file under a directory (default GOROOT/src) with the gasm encoder
|
||||
only: suffixed files for their architecture, suffix-less files for
|
||||
all four, as a GOARCH build would. Reports the headline number (127
|
||||
of 627 GOROOT files, 20.3 %, assemble for every target architecture,
|
||||
against 23 in the previous release), the per-architecture pass rates
|
||||
and the most common failure reasons with a representative file each,
|
||||
of 627 GOROOT files, 20.3 %, assemble for every target architecture),
|
||||
the per-architecture pass rates and the most common failure reasons
|
||||
with a representative file each,
|
||||
which drive the encodability backlog by frequency.
|
||||
- **Fuzz targets for the parser and the formatter.** FuzzParse (no
|
||||
panic, always a usable file) and FuzzFormatIdempotency (formatting
|
||||
twice equals formatting once; clean input stays clean) seed
|
||||
themselves from the repository's kernels, so the plain test suite
|
||||
replays every seed in CI and `just fuzz` runs the mutation engine on
|
||||
demand.
|
||||
- **Oracle parity as its own CI step.** The push pipeline already ran
|
||||
the live go-tool-asm comparison inside the suite; a dedicated step
|
||||
now names that gate when it fails.
|
||||
- **Man pages.** docs/man carries gasm(1) and one page per command,
|
||||
written in roff: synopsis, description, every flag with its default,
|
||||
exit status, worked examples and cross-references.
|
||||
- **The parser and the formatter are fuzzed.** Two targets carry the
|
||||
guarantee: no input makes the parser panic, and every input yields a
|
||||
file the rest of the toolkit can work on; formatting twice equals
|
||||
formatting once, and clean input stays clean. They seed from the
|
||||
repository's own kernels, and `just fuzz` drives the mutation engine
|
||||
on demand.
|
||||
- **Man pages.** docs/man carries gasm(1) and a page for every command
|
||||
except `version`, which gasm(1) documents itself, written in roff:
|
||||
synopsis, description, every flag with its default, exit status,
|
||||
worked examples and cross-references.
|
||||
`just install-man` compresses them into ~/.local/share/man (MANDIR
|
||||
overrides) and `just uninstall-man` removes them. A test builds the
|
||||
binary and compares every command's `-h` output with its page, so the
|
||||
pages cannot drift from the CLI.
|
||||
binary and compares each page's flags and synopsis with its own `-h`
|
||||
output, so the pages cannot drift from the CLI.
|
||||
|
||||
### Changed
|
||||
|
||||
- **Go 1.27.1 required.** The module declares `go 1.27.1`, so building
|
||||
from source needs that patch release or newer.
|
||||
- **Canonical just recipes.** `just gates` is the definition of done
|
||||
(build, fmt-check, vet, test, race). `install` now builds and copies
|
||||
the binary into `~/.local/bin` (`BINDIR` overrides) instead of
|
||||
downloading module dependencies, and `install-bin` is gone. The test
|
||||
gate sweeps the logic packages (arch through verify; the hardware-bound
|
||||
`debug` and the thin `cmd/gasm` sit outside it), so the coverage floor
|
||||
is computed over the product code and the number is identical locally
|
||||
and in CI. `fuzz` requires its target package.
|
||||
gate sweeps the logic packages (arch through verify; the ptrace-bound
|
||||
`debug` and the thin `cmd/gasm` sit outside the coverage profile), so
|
||||
the coverage floor is computed over the product code and the number is
|
||||
identical locally and in CI; the two excluded packages' own tests run
|
||||
in the gate and in the pipelines, outside the floor. `fuzz` requires
|
||||
its target package.
|
||||
- **The reported version comes from the build.** `gasm --version`
|
||||
prints the version the toolchain recorded: the tag on a tagged
|
||||
checkout, a pseudo-version naming the commit below one, `+dirty` on a
|
||||
@@ -78,8 +81,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
synopsis, the commands, every flag with its default, the exit codes and
|
||||
worked examples; `CONTRIBUTING.md` carries the Contributor terms and
|
||||
states the commit trailer form, the one-logical-change rule and the
|
||||
licence header rule. The repository's own assembly (the `verify`
|
||||
trampolines and the test kernels) is in `gasm fmt` canonical form.
|
||||
licence header rule; `SECURITY.md` states how a vulnerability is
|
||||
reported and what to expect. The repository's own assembly (the
|
||||
`verify` trampolines and the test kernels) is in `gasm fmt` canonical
|
||||
form.
|
||||
- **The README states the project's purpose and status.** It opens with
|
||||
a warning that the tool is an experiment under active development,
|
||||
version 0.x.x, free to change without warning, with 1.0.0 far off,
|
||||
@@ -88,7 +93,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
Go toolchain), argues the case for the syntax in a new Why Plan 9
|
||||
assembly section, and carries a Direction section: extended
|
||||
instruction support, full GOOBJ and ELF compilation, Linux and
|
||||
FreeBSD, and the four architectures.
|
||||
FreeBSD, and the four architectures. A Validation status section
|
||||
states what has been executed where: amd64 on real hardware, the other
|
||||
three architectures under qemu-user emulation, the encoding parity on
|
||||
the host for all four, and the debugger's ptrace path on amd64 only.
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -125,13 +133,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
(everything after it was dropped); it is an illegal token now, invalid
|
||||
UTF-8 no longer inflates byte offsets, and CRLF files format to
|
||||
uniform LF.
|
||||
- **A frameless amd64 function containing a CALL read its arguments from
|
||||
the wrong stack slot.** The forced base-pointer frame shifted
|
||||
FP references by eight bytes (`x+0(FP)` resolved to SP+0x18 where the
|
||||
toolchain emits SP+0x10), so such functions loaded garbage. The
|
||||
class-2 stack guard had the sibling defect: whenever the underflow
|
||||
branch relaxed to its 32-bit form, its displacement ran four bytes
|
||||
past the target and into the morestack CALL.
|
||||
- **The class-2 stack guard branched four bytes past its target.** When
|
||||
the underflow branch relaxed to its 32-bit form, its displacement was
|
||||
still computed as if the branch were two bytes long, so it landed
|
||||
inside the morestack CALL instead of the compare that decides it.
|
||||
The long form is reachable once a large frame carries a body of roughly
|
||||
a hundred bytes.
|
||||
- **Immediate operands wrapped silently on amd64.** Shift counts,
|
||||
immediates beyond the operand's width and displacements beyond int32
|
||||
truncated without a diagnostic (`SHLQ $300` assembled as `$44`); they
|
||||
@@ -290,8 +297,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
the other architectures, and the abi kernels use it; every verify
|
||||
kernel is now ground-truth checkable (the numeric `X27` spelling the
|
||||
kernels used is one `go tool asm` rejects).
|
||||
- The GOROOT corpus number rose to 127 of 627 files (20.3 %) assembling
|
||||
for every target architecture, from 108.
|
||||
- **Two more spellings GOROOT uses now assemble.** riscv64 `FCLASSD`
|
||||
(classify a float64 into an integer mask) is encodable, and a
|
||||
displacement written as a product (`0*8(X5)`, the toolchain's own
|
||||
spelling in several kernels) parses instead of being rejected.
|
||||
- **loong64 JIT execution enabled.** The loong64 trampoline is now
|
||||
validated end to end under qemu-user emulation (plain and ABI-checked
|
||||
calls, goroutine-clobber detection), so `gasm verify` runs the JIT
|
||||
|
||||
Reference in New Issue
Block a user