// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause #include "textflag.h" // The link-regression kernel for amd64. One file exercises every GOOBJ // record a small assembly contribution to a program needs: plain stack // discipline (add), an intra-file call (probe calling seven, R_CALL), a // code-to-data reference (word<>, R_PCREL), a symbol-valued DATA field // (entry holding seven's address, R_ADDR), NOPTR data outside the GC's // type scan (counter) and the data section itself. // func add(a, b int64) int64 TEXT ·add(SB), NOSPLIT, $0-24 MOVQ a+0(FP), AX MOVQ b+8(FP), CX ADDQ CX, AX MOVQ AX, ret+16(FP) RET // func seven() int64 TEXT ·seven(SB), NOSPLIT, $0-8 MOVQ $7, AX MOVQ AX, ret+0(FP) RET // func probe() int64 = seven() + word<>(SB) TEXT ·probe(SB), NOSPLIT, $8-8 CALL ·seven(SB) MOVQ (SP), AX MOVQ word<>(SB), CX ADDQ CX, AX MOVQ AX, ret+0(FP) RET // func entryAddr() uintptr TEXT ·entryAddr(SB), NOSPLIT, $0-8 MOVQ entry(SB), AX MOVQ AX, ret+0(FP) RET // func counterVal() int64 TEXT ·counterVal(SB), NOSPLIT, $0-8 MOVQ counter(SB), AX MOVQ AX, ret+0(FP) RET GLOBL word<>(SB), RODATA, $8 DATA word<>+0(SB)/8, $0x0fedcba987654321 GLOBL entry(SB), RODATA, $8 DATA entry+0(SB)/8, $·seven(SB) GLOBL counter(SB), NOPTR, $8 DATA counter+0(SB)/8, $1234