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
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user