chore: prepare release v0.33.0
Release / build (amd64, linux) (push) Successful in 49s
Release / build (arm64, linux) (push) Successful in 43s
Release / build (loong64, linux) (push) Successful in 46s
Release / build (riscv64, linux) (push) Successful in 45s
Test / vet (push) Successful in 47s
Release / release (push) Successful in 18s
Test / test (push) Successful in 2m39s
Test / build (push) Successful in 43s

This commit is contained in:
2026-09-14 23:36:19 +02:00
parent 40476546df
commit fff9f75595
6 changed files with 101 additions and 6 deletions
+56
View File
@@ -11,6 +11,62 @@ and this project adheres to [Conventional Commits](https://www.conventionalcommi
-
## [0.33.0] — 2026-09-14
### Added
- **Stack-split guards in `gasm asm`.** Every framed function now gets
the morestack prologue check and the trailing morestack block
(`CALL runtime.morestack_noctxt`), byte-identical to the toolchain's
`stacksplit` output on all four architectures: the small, medium and
big frame classes, auto-NOSPLIT leaves, the materialised constants of
large frames (arm64 `R27`, riscv64 `X31`, loong64 `R30`) and the
arm64 extrasize rule. Assembled objects are therefore linkable for
split functions, not only `NOSPLIT` leaves.
- **`gasm dis`.** Standalone disassembly through `golang.org/x/arch`:
a `.s` file is assembled and listed per `TEXT` function with local
labels at their real offsets, or raw bytes from a file or stdin are
disassembled linearly (`-a` selects the architecture). The debugger
shares the same decoder instead of carrying its own.
- **`gasm fmt -l` and `-d`.** Check mode lists files whose formatting
differs; diff mode prints a unified diff from the project's own
LCS-based differ, with GNU header semantics.
- **LSP cross-file navigation.** Go-to-definition and find references
fall back from local labels to the `TEXT` functions of every open
document, and rename follows the same cross-file matching.
- **Large frame offsets on riscv64 and arm64.** Frame-relative loads
and stores beyond the signed 12-bit immediate range materialise the
address through the toolchain temp register (riscv64 `X31`, arm64
`R27`) instead of silently truncating the offset (riscv64) or
rejecting the instruction (arm64); arm64 frame sizes now add the
toolchain's extrasize exactly (+8 when the frame leaves an alignment
gap, +16 when it is already aligned).
- **Tail calls `JMP sym(SB)`** on all four architectures (amd64 `E9`,
arm64 `B`, riscv64 `JAL X0`, loong64 `B`) with the call relocation.
- **Live oracle-parity tests.** Kernel files covering every guard
class, large-offset pattern and tail call are assembled by gasm and
by the installed `go tool asm` and compared byte-for-byte on all four
architectures, alongside the existing pinned-byte tests.
### Fixed
- The v0.32.0 review findings: the parser rejects malformed `TEXT`
frames and parses signed frame sizes; amd64 frame adjustments above
127 bytes encode with imm32; arm64 and loong64 relocation encodings
match the toolchain; the linter guards unnamed `TEXT` directives and
refreshes its textflag table; the LSP recovers from handler panics
and decodes client URIs; watchpoint slot state moved into the debug
session; dead verify code removed; em and en dashes replaced across
sources.
- `gasm asm --format goobj`: internal calls to `TEXT` symbols of the
same file resolve on every architecture (the reference check accepted
only the amd64 call kind).
- `gasm asm --format elf` on loong64: branch relocations now map to
`R_LARCH_B26` instead of falling into `R_LARCH_PCALA_HI20`.
- arm64 large-prologue `ADD`/`SUB` use the extended-register encoding
the toolchain picks, and the morestack block saves the link register
with the toolchain's `OR` form on loong64.
## [0.32.0] — 2026-08-31
### Added