-
v0.12.0 Stable
released this
2026-07-17 16:57:04 +00:00 | 268 commits to main since this releaseGOOBJ emission: gasm-assembled functions drop into a
go buildwithout the
Go assembler.Added
asm: GOOBJ object output.gasm asm --format goobj -p <pkgpath>
writes the Go toolchain's own object format — the onecmd/linkconsumes
directly: the functions as non-package symbols qualified with the package
path (exactly ascmd/asmrecords assembly symbols), theGLOBLdata,
one serializedFuncInfoper function (argument/frame sizes, the asm
func flag, the start line, the file table) and the four pc-value tables
(pcsp,pcfile,pcline,pcinline). Thepcsptable carries the
real stack deltas: the assembler now tracks every stack-adjustment
boundary through the prologue (PUSHQ BP,SUBQ $frame, SP) and each
RET's epilogue, so frame-pointer functions unwind correctly. The
object preamble — the version-and-experiment header the linker compares
verbatim — is captured from the installedgo tool asm, so the output is
always consistent with the toolchain that links it.asm: relocations against file-localGLOBLsymbols becomeR_PCREL
entries in the GOOBJ output, with the instruction's displacement field
left zero for the linker to fill (ascmd/asmleaves it).
Fixed
parser: 64-bitDATAliterals aboveMaxInt64
(DATA mask<>+8(SB)/8, $0x800f…) parse as unsigned and keep their bit
pattern, instead of being rejected as non-integer.
Verified
- End-to-end: a gasm-emitted GOOBJ swapped into a
go buildin place of
the toolchain's assembly object links and runs with output identical to
the baseline binary (stack-argument calls and aGLOBLrelocation
resolved by the Go linker). All 17 go-flac AVX2 kernel functions emit as
a GOOBJ thatgo tool nmreads back with every symbol intact.
Downloads