]> Cypherpunks repositories - gostls13.git/commitdiff
cmd: fix DWARF gen bug with packages that use assembly
authorThan McIntosh <thanm@golang.org>
Sat, 5 Apr 2025 22:59:59 +0000 (18:59 -0400)
committerThan McIntosh <thanm@golang.org>
Sun, 13 Apr 2025 15:09:12 +0000 (08:09 -0700)
When the compiler builds a Go package with DWARF 5 generation enabled,
it emits relocations into various generated DWARF symbols (ex:
SDWARFFCN) that use the R_DWTXTADDR_* flavor of relocations. The
specific size of this relocation is selected based on the total number
of functions in the package -- if the package is tiny (just a couple
funcs) we can use R_DWTXTADDR_U1 relocs (which target just a byte); if
the package is larger we might need to use the 2-byte or 3-byte flavor
of this reloc.

Prior to this patch, the strategy used to pick the right relocation
size was flawed in that it didn't take into account packages with
assembly code. For example, if you have a package P with 200 funcs
written in Go source and 200 funcs written in assembly, you can't use
the R_DWTXTADDR_U1 reloc flavor for indirect text references since the
real function count for the package (asm + go) exceeds 255.

The new strategy (with this patch) is to have the compiler look at the
"symabis" file to determine the count of assembly functions. For the
assembler, rather than create additional plumbing to pass in the Go
source func count we just use an dummy (artificially high) function
count so as to select a relocation that will be large enough.

Fixes #72810.
Updates #26379.

Change-Id: I98d04f3c6aacca1dafe1f1610c99c77db290d1d8
Reviewed-on: https://go-review.googlesource.com/c/go/+/663235
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
src/cmd/asm/main.go
src/cmd/compile/internal/ssagen/abi.go
src/cmd/compile/testdata/script/dwarf5_gen_assembly_and_go.txt [new file with mode: 0644]
src/cmd/internal/objabi/reloctype.go

index 9fdb7c49a2bb5631e5fe4309cd70b67de35a00e5..2a9ebe9b3e217873363f2777cecbd2c5bec84343 100644 (file)
@@ -49,6 +49,7 @@ func main() {
        ctxt.Debugpcln = flags.DebugFlags.PCTab
        ctxt.IsAsm = true
        ctxt.Pkgpath = *flags.Importpath
+       ctxt.DwTextCount = objabi.DummyDwarfFunctionCountForAssembler()
        switch *flags.Spectre {
        default:
                log.Printf("unknown setting -spectre=%s", *flags.Spectre)
index 9ab54988780920c553752d7d7fdcb1a918318bf5..3d50155cf36d10ba3b30079fb1a1b6521a1a17d1 100644 (file)
@@ -89,6 +89,7 @@ func (s *SymABIs) ReadSymABIs(file string) {
                        // Record for later.
                        if parts[0] == "def" {
                                s.defs[sym] = abi
+                               base.Ctxt.DwTextCount++
                        } else {
                                s.refs[sym] |= obj.ABISetOf(abi)
                        }
diff --git a/src/cmd/compile/testdata/script/dwarf5_gen_assembly_and_go.txt b/src/cmd/compile/testdata/script/dwarf5_gen_assembly_and_go.txt
new file mode 100644 (file)
index 0000000..2acbe01
--- /dev/null
@@ -0,0 +1,1345 @@
+
+# Regression test case for bug #72810. Uses a build with
+# Go source files and assembly source files.
+
+go build
+
+-- go.mod --
+module uses.asm
+
+go 1.25
+-- a.go --
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+package main
+
+func main() {
+       t0()
+       t1()
+       t2()
+       t3()
+       t4()
+       t5()
+       t6()
+       t7()
+       t8()
+       t9()
+       t10()
+       t11()
+       t12()
+       t13()
+       t14()
+       t15()
+       t16()
+       t17()
+       t18()
+       t19()
+       t20()
+       t21()
+       t22()
+       t23()
+       t24()
+       t25()
+       t26()
+       t27()
+       t28()
+       t29()
+       t30()
+       t31()
+       t32()
+       t33()
+       t34()
+       t35()
+       t36()
+       t37()
+       t38()
+       t39()
+       t40()
+       t41()
+       t42()
+       t43()
+       t44()
+       t45()
+       t46()
+       t47()
+       t48()
+       t49()
+       t50()
+       t51()
+       t52()
+       t53()
+       t54()
+       t55()
+       t56()
+       t57()
+       t58()
+       t59()
+       t60()
+       t61()
+       t62()
+       t63()
+       t64()
+       t65()
+       t66()
+       t67()
+       t68()
+       t69()
+       t70()
+       t71()
+       t72()
+       t73()
+       t74()
+       t75()
+       t76()
+       t77()
+       t78()
+       t79()
+       t80()
+       t81()
+       t82()
+       t83()
+       t84()
+       t85()
+       t86()
+       t87()
+       t88()
+       t89()
+       t90()
+       t91()
+       t92()
+       t93()
+       t94()
+       t95()
+       t96()
+       t97()
+       t98()
+       t99()
+       t100()
+       t101()
+       t102()
+       t103()
+       t104()
+       t105()
+       t106()
+       t107()
+       t108()
+       t109()
+       t110()
+       t111()
+       t112()
+       t113()
+       t114()
+       t115()
+       t116()
+       t117()
+       t118()
+       t119()
+       t120()
+       t121()
+       t122()
+       t123()
+       t124()
+       t125()
+       t126()
+       t127()
+       t128()
+       t129()
+       t130()
+       t131()
+       t132()
+       t133()
+       t134()
+       t135()
+       t136()
+       t137()
+       t138()
+       t139()
+       t140()
+       t141()
+       t142()
+       t143()
+       t144()
+       t145()
+       t146()
+       t147()
+       t148()
+       t149()
+       t150()
+       t151()
+       t152()
+       t153()
+       t154()
+       t155()
+       t156()
+       t157()
+       t158()
+       t159()
+       t160()
+       t161()
+       t162()
+       t163()
+       t164()
+       t165()
+       t166()
+       t167()
+       t168()
+       t169()
+       t170()
+       t171()
+       t172()
+       t173()
+       t174()
+       t175()
+       t176()
+       t177()
+       t178()
+       t179()
+       t180()
+       t181()
+       t182()
+       t183()
+       t184()
+       t185()
+       t186()
+       t187()
+       t188()
+       t189()
+       t190()
+       t191()
+       t192()
+       t193()
+       t194()
+       t195()
+       t196()
+       t197()
+       t198()
+       t199()
+       t200()
+       t201()
+       t202()
+       t203()
+       t204()
+       t205()
+       t206()
+       t207()
+       t208()
+       t209()
+       t210()
+       t211()
+       t212()
+       t213()
+       t214()
+       t215()
+       t216()
+       t217()
+       t218()
+       t219()
+       t220()
+       t221()
+       t222()
+       t223()
+       t224()
+       t225()
+       t226()
+       t227()
+       t228()
+       t229()
+       t230()
+       t231()
+       t232()
+       t233()
+       t234()
+       t235()
+       t236()
+       t237()
+       t238()
+       t239()
+       t240()
+       t241()
+       t242()
+       t243()
+       t244()
+       t245()
+       t246()
+       t247()
+       t248()
+       t249()
+       t250()
+       t251()
+       t252()
+       t253()
+       t254()
+}
+
+func t0()
+func t1()
+func t2()
+func t3()
+func t4()
+func t5()
+func t6()
+func t7()
+func t8()
+func t9()
+func t10()
+func t11()
+func t12()
+func t13()
+func t14()
+func t15()
+func t16()
+func t17()
+func t18()
+func t19()
+func t20()
+func t21()
+func t22()
+func t23()
+func t24()
+func t25()
+func t26()
+func t27()
+func t28()
+func t29()
+func t30()
+func t31()
+func t32()
+func t33()
+func t34()
+func t35()
+func t36()
+func t37()
+func t38()
+func t39()
+func t40()
+func t41()
+func t42()
+func t43()
+func t44()
+func t45()
+func t46()
+func t47()
+func t48()
+func t49()
+func t50()
+func t51()
+func t52()
+func t53()
+func t54()
+func t55()
+func t56()
+func t57()
+func t58()
+func t59()
+func t60()
+func t61()
+func t62()
+func t63()
+func t64()
+func t65()
+func t66()
+func t67()
+func t68()
+func t69()
+func t70()
+func t71()
+func t72()
+func t73()
+func t74()
+func t75()
+func t76()
+func t77()
+func t78()
+func t79()
+func t80()
+func t81()
+func t82()
+func t83()
+func t84()
+func t85()
+func t86()
+func t87()
+func t88()
+func t89()
+func t90()
+func t91()
+func t92()
+func t93()
+func t94()
+func t95()
+func t96()
+func t97()
+func t98()
+func t99()
+func t100()
+func t101()
+func t102()
+func t103()
+func t104()
+func t105()
+func t106()
+func t107()
+func t108()
+func t109()
+func t110()
+func t111()
+func t112()
+func t113()
+func t114()
+func t115()
+func t116()
+func t117()
+func t118()
+func t119()
+func t120()
+func t121()
+func t122()
+func t123()
+func t124()
+func t125()
+func t126()
+func t127()
+func t128()
+func t129()
+func t130()
+func t131()
+func t132()
+func t133()
+func t134()
+func t135()
+func t136()
+func t137()
+func t138()
+func t139()
+func t140()
+func t141()
+func t142()
+func t143()
+func t144()
+func t145()
+func t146()
+func t147()
+func t148()
+func t149()
+func t150()
+func t151()
+func t152()
+func t153()
+func t154()
+func t155()
+func t156()
+func t157()
+func t158()
+func t159()
+func t160()
+func t161()
+func t162()
+func t163()
+func t164()
+func t165()
+func t166()
+func t167()
+func t168()
+func t169()
+func t170()
+func t171()
+func t172()
+func t173()
+func t174()
+func t175()
+func t176()
+func t177()
+func t178()
+func t179()
+func t180()
+func t181()
+func t182()
+func t183()
+func t184()
+func t185()
+func t186()
+func t187()
+func t188()
+func t189()
+func t190()
+func t191()
+func t192()
+func t193()
+func t194()
+func t195()
+func t196()
+func t197()
+func t198()
+func t199()
+func t200()
+func t201()
+func t202()
+func t203()
+func t204()
+func t205()
+func t206()
+func t207()
+func t208()
+func t209()
+func t210()
+func t211()
+func t212()
+func t213()
+func t214()
+func t215()
+func t216()
+func t217()
+func t218()
+func t219()
+func t220()
+func t221()
+func t222()
+func t223()
+func t224()
+func t225()
+func t226()
+func t227()
+func t228()
+func t229()
+func t230()
+func t231()
+func t232()
+func t233()
+func t234()
+func t235()
+func t236()
+func t237()
+func t238()
+func t239()
+func t240()
+func t241()
+func t242()
+func t243()
+func t244()
+func t245()
+func t246()
+func t247()
+func t248()
+func t249()
+func t250()
+func t251()
+func t252()
+func t253()
+func t254()
+
+-- a.s --
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+TEXT ·t0(SB),0,$0
+       RET
+
+TEXT ·t1(SB),0,$0
+       RET
+
+TEXT ·t2(SB),0,$0
+       RET
+
+TEXT ·t3(SB),0,$0
+       RET
+
+TEXT ·t4(SB),0,$0
+       RET
+
+TEXT ·t5(SB),0,$0
+       RET
+
+TEXT ·t6(SB),0,$0
+       RET
+
+TEXT ·t7(SB),0,$0
+       RET
+
+TEXT ·t8(SB),0,$0
+       RET
+
+TEXT ·t9(SB),0,$0
+       RET
+
+TEXT ·t10(SB),0,$0
+       RET
+
+TEXT ·t11(SB),0,$0
+       RET
+
+TEXT ·t12(SB),0,$0
+       RET
+
+TEXT ·t13(SB),0,$0
+       RET
+
+TEXT ·t14(SB),0,$0
+       RET
+
+TEXT ·t15(SB),0,$0
+       RET
+
+TEXT ·t16(SB),0,$0
+       RET
+
+TEXT ·t17(SB),0,$0
+       RET
+
+TEXT ·t18(SB),0,$0
+       RET
+
+TEXT ·t19(SB),0,$0
+       RET
+
+TEXT ·t20(SB),0,$0
+       RET
+
+TEXT ·t21(SB),0,$0
+       RET
+
+TEXT ·t22(SB),0,$0
+       RET
+
+TEXT ·t23(SB),0,$0
+       RET
+
+TEXT ·t24(SB),0,$0
+       RET
+
+TEXT ·t25(SB),0,$0
+       RET
+
+TEXT ·t26(SB),0,$0
+       RET
+
+TEXT ·t27(SB),0,$0
+       RET
+
+TEXT ·t28(SB),0,$0
+       RET
+
+TEXT ·t29(SB),0,$0
+       RET
+
+TEXT ·t30(SB),0,$0
+       RET
+
+TEXT ·t31(SB),0,$0
+       RET
+
+TEXT ·t32(SB),0,$0
+       RET
+
+TEXT ·t33(SB),0,$0
+       RET
+
+TEXT ·t34(SB),0,$0
+       RET
+
+TEXT ·t35(SB),0,$0
+       RET
+
+TEXT ·t36(SB),0,$0
+       RET
+
+TEXT ·t37(SB),0,$0
+       RET
+
+TEXT ·t38(SB),0,$0
+       RET
+
+TEXT ·t39(SB),0,$0
+       RET
+
+TEXT ·t40(SB),0,$0
+       RET
+
+TEXT ·t41(SB),0,$0
+       RET
+
+TEXT ·t42(SB),0,$0
+       RET
+
+TEXT ·t43(SB),0,$0
+       RET
+
+TEXT ·t44(SB),0,$0
+       RET
+
+TEXT ·t45(SB),0,$0
+       RET
+
+TEXT ·t46(SB),0,$0
+       RET
+
+TEXT ·t47(SB),0,$0
+       RET
+
+TEXT ·t48(SB),0,$0
+       RET
+
+TEXT ·t49(SB),0,$0
+       RET
+
+TEXT ·t50(SB),0,$0
+       RET
+
+TEXT ·t51(SB),0,$0
+       RET
+
+TEXT ·t52(SB),0,$0
+       RET
+
+TEXT ·t53(SB),0,$0
+       RET
+
+TEXT ·t54(SB),0,$0
+       RET
+
+TEXT ·t55(SB),0,$0
+       RET
+
+TEXT ·t56(SB),0,$0
+       RET
+
+TEXT ·t57(SB),0,$0
+       RET
+
+TEXT ·t58(SB),0,$0
+       RET
+
+TEXT ·t59(SB),0,$0
+       RET
+
+TEXT ·t60(SB),0,$0
+       RET
+
+TEXT ·t61(SB),0,$0
+       RET
+
+TEXT ·t62(SB),0,$0
+       RET
+
+TEXT ·t63(SB),0,$0
+       RET
+
+TEXT ·t64(SB),0,$0
+       RET
+
+TEXT ·t65(SB),0,$0
+       RET
+
+TEXT ·t66(SB),0,$0
+       RET
+
+TEXT ·t67(SB),0,$0
+       RET
+
+TEXT ·t68(SB),0,$0
+       RET
+
+TEXT ·t69(SB),0,$0
+       RET
+
+TEXT ·t70(SB),0,$0
+       RET
+
+TEXT ·t71(SB),0,$0
+       RET
+
+TEXT ·t72(SB),0,$0
+       RET
+
+TEXT ·t73(SB),0,$0
+       RET
+
+TEXT ·t74(SB),0,$0
+       RET
+
+TEXT ·t75(SB),0,$0
+       RET
+
+TEXT ·t76(SB),0,$0
+       RET
+
+TEXT ·t77(SB),0,$0
+       RET
+
+TEXT ·t78(SB),0,$0
+       RET
+
+TEXT ·t79(SB),0,$0
+       RET
+
+TEXT ·t80(SB),0,$0
+       RET
+
+TEXT ·t81(SB),0,$0
+       RET
+
+TEXT ·t82(SB),0,$0
+       RET
+
+TEXT ·t83(SB),0,$0
+       RET
+
+TEXT ·t84(SB),0,$0
+       RET
+
+TEXT ·t85(SB),0,$0
+       RET
+
+TEXT ·t86(SB),0,$0
+       RET
+
+TEXT ·t87(SB),0,$0
+       RET
+
+TEXT ·t88(SB),0,$0
+       RET
+
+TEXT ·t89(SB),0,$0
+       RET
+
+TEXT ·t90(SB),0,$0
+       RET
+
+TEXT ·t91(SB),0,$0
+       RET
+
+TEXT ·t92(SB),0,$0
+       RET
+
+TEXT ·t93(SB),0,$0
+       RET
+
+TEXT ·t94(SB),0,$0
+       RET
+
+TEXT ·t95(SB),0,$0
+       RET
+
+TEXT ·t96(SB),0,$0
+       RET
+
+TEXT ·t97(SB),0,$0
+       RET
+
+TEXT ·t98(SB),0,$0
+       RET
+
+TEXT ·t99(SB),0,$0
+       RET
+
+TEXT ·t100(SB),0,$0
+       RET
+
+TEXT ·t101(SB),0,$0
+       RET
+
+TEXT ·t102(SB),0,$0
+       RET
+
+TEXT ·t103(SB),0,$0
+       RET
+
+TEXT ·t104(SB),0,$0
+       RET
+
+TEXT ·t105(SB),0,$0
+       RET
+
+TEXT ·t106(SB),0,$0
+       RET
+
+TEXT ·t107(SB),0,$0
+       RET
+
+TEXT ·t108(SB),0,$0
+       RET
+
+TEXT ·t109(SB),0,$0
+       RET
+
+TEXT ·t110(SB),0,$0
+       RET
+
+TEXT ·t111(SB),0,$0
+       RET
+
+TEXT ·t112(SB),0,$0
+       RET
+
+TEXT ·t113(SB),0,$0
+       RET
+
+TEXT ·t114(SB),0,$0
+       RET
+
+TEXT ·t115(SB),0,$0
+       RET
+
+TEXT ·t116(SB),0,$0
+       RET
+
+TEXT ·t117(SB),0,$0
+       RET
+
+TEXT ·t118(SB),0,$0
+       RET
+
+TEXT ·t119(SB),0,$0
+       RET
+
+TEXT ·t120(SB),0,$0
+       RET
+
+TEXT ·t121(SB),0,$0
+       RET
+
+TEXT ·t122(SB),0,$0
+       RET
+
+TEXT ·t123(SB),0,$0
+       RET
+
+TEXT ·t124(SB),0,$0
+       RET
+
+TEXT ·t125(SB),0,$0
+       RET
+
+TEXT ·t126(SB),0,$0
+       RET
+
+TEXT ·t127(SB),0,$0
+       RET
+
+TEXT ·t128(SB),0,$0
+       RET
+
+TEXT ·t129(SB),0,$0
+       RET
+
+TEXT ·t130(SB),0,$0
+       RET
+
+TEXT ·t131(SB),0,$0
+       RET
+
+TEXT ·t132(SB),0,$0
+       RET
+
+TEXT ·t133(SB),0,$0
+       RET
+
+TEXT ·t134(SB),0,$0
+       RET
+
+TEXT ·t135(SB),0,$0
+       RET
+
+TEXT ·t136(SB),0,$0
+       RET
+
+TEXT ·t137(SB),0,$0
+       RET
+
+TEXT ·t138(SB),0,$0
+       RET
+
+TEXT ·t139(SB),0,$0
+       RET
+
+TEXT ·t140(SB),0,$0
+       RET
+
+TEXT ·t141(SB),0,$0
+       RET
+
+TEXT ·t142(SB),0,$0
+       RET
+
+TEXT ·t143(SB),0,$0
+       RET
+
+TEXT ·t144(SB),0,$0
+       RET
+
+TEXT ·t145(SB),0,$0
+       RET
+
+TEXT ·t146(SB),0,$0
+       RET
+
+TEXT ·t147(SB),0,$0
+       RET
+
+TEXT ·t148(SB),0,$0
+       RET
+
+TEXT ·t149(SB),0,$0
+       RET
+
+TEXT ·t150(SB),0,$0
+       RET
+
+TEXT ·t151(SB),0,$0
+       RET
+
+TEXT ·t152(SB),0,$0
+       RET
+
+TEXT ·t153(SB),0,$0
+       RET
+
+TEXT ·t154(SB),0,$0
+       RET
+
+TEXT ·t155(SB),0,$0
+       RET
+
+TEXT ·t156(SB),0,$0
+       RET
+
+TEXT ·t157(SB),0,$0
+       RET
+
+TEXT ·t158(SB),0,$0
+       RET
+
+TEXT ·t159(SB),0,$0
+       RET
+
+TEXT ·t160(SB),0,$0
+       RET
+
+TEXT ·t161(SB),0,$0
+       RET
+
+TEXT ·t162(SB),0,$0
+       RET
+
+TEXT ·t163(SB),0,$0
+       RET
+
+TEXT ·t164(SB),0,$0
+       RET
+
+TEXT ·t165(SB),0,$0
+       RET
+
+TEXT ·t166(SB),0,$0
+       RET
+
+TEXT ·t167(SB),0,$0
+       RET
+
+TEXT ·t168(SB),0,$0
+       RET
+
+TEXT ·t169(SB),0,$0
+       RET
+
+TEXT ·t170(SB),0,$0
+       RET
+
+TEXT ·t171(SB),0,$0
+       RET
+
+TEXT ·t172(SB),0,$0
+       RET
+
+TEXT ·t173(SB),0,$0
+       RET
+
+TEXT ·t174(SB),0,$0
+       RET
+
+TEXT ·t175(SB),0,$0
+       RET
+
+TEXT ·t176(SB),0,$0
+       RET
+
+TEXT ·t177(SB),0,$0
+       RET
+
+TEXT ·t178(SB),0,$0
+       RET
+
+TEXT ·t179(SB),0,$0
+       RET
+
+TEXT ·t180(SB),0,$0
+       RET
+
+TEXT ·t181(SB),0,$0
+       RET
+
+TEXT ·t182(SB),0,$0
+       RET
+
+TEXT ·t183(SB),0,$0
+       RET
+
+TEXT ·t184(SB),0,$0
+       RET
+
+TEXT ·t185(SB),0,$0
+       RET
+
+TEXT ·t186(SB),0,$0
+       RET
+
+TEXT ·t187(SB),0,$0
+       RET
+
+TEXT ·t188(SB),0,$0
+       RET
+
+TEXT ·t189(SB),0,$0
+       RET
+
+TEXT ·t190(SB),0,$0
+       RET
+
+TEXT ·t191(SB),0,$0
+       RET
+
+TEXT ·t192(SB),0,$0
+       RET
+
+TEXT ·t193(SB),0,$0
+       RET
+
+TEXT ·t194(SB),0,$0
+       RET
+
+TEXT ·t195(SB),0,$0
+       RET
+
+TEXT ·t196(SB),0,$0
+       RET
+
+TEXT ·t197(SB),0,$0
+       RET
+
+TEXT ·t198(SB),0,$0
+       RET
+
+TEXT ·t199(SB),0,$0
+       RET
+
+TEXT ·t200(SB),0,$0
+       RET
+
+TEXT ·t201(SB),0,$0
+       RET
+
+TEXT ·t202(SB),0,$0
+       RET
+
+TEXT ·t203(SB),0,$0
+       RET
+
+TEXT ·t204(SB),0,$0
+       RET
+
+TEXT ·t205(SB),0,$0
+       RET
+
+TEXT ·t206(SB),0,$0
+       RET
+
+TEXT ·t207(SB),0,$0
+       RET
+
+TEXT ·t208(SB),0,$0
+       RET
+
+TEXT ·t209(SB),0,$0
+       RET
+
+TEXT ·t210(SB),0,$0
+       RET
+
+TEXT ·t211(SB),0,$0
+       RET
+
+TEXT ·t212(SB),0,$0
+       RET
+
+TEXT ·t213(SB),0,$0
+       RET
+
+TEXT ·t214(SB),0,$0
+       RET
+
+TEXT ·t215(SB),0,$0
+       RET
+
+TEXT ·t216(SB),0,$0
+       RET
+
+TEXT ·t217(SB),0,$0
+       RET
+
+TEXT ·t218(SB),0,$0
+       RET
+
+TEXT ·t219(SB),0,$0
+       RET
+
+TEXT ·t220(SB),0,$0
+       RET
+
+TEXT ·t221(SB),0,$0
+       RET
+
+TEXT ·t222(SB),0,$0
+       RET
+
+TEXT ·t223(SB),0,$0
+       RET
+
+TEXT ·t224(SB),0,$0
+       RET
+
+TEXT ·t225(SB),0,$0
+       RET
+
+TEXT ·t226(SB),0,$0
+       RET
+
+TEXT ·t227(SB),0,$0
+       RET
+
+TEXT ·t228(SB),0,$0
+       RET
+
+TEXT ·t229(SB),0,$0
+       RET
+
+TEXT ·t230(SB),0,$0
+       RET
+
+TEXT ·t231(SB),0,$0
+       RET
+
+TEXT ·t232(SB),0,$0
+       RET
+
+TEXT ·t233(SB),0,$0
+       RET
+
+TEXT ·t234(SB),0,$0
+       RET
+
+TEXT ·t235(SB),0,$0
+       RET
+
+TEXT ·t236(SB),0,$0
+       RET
+
+TEXT ·t237(SB),0,$0
+       RET
+
+TEXT ·t238(SB),0,$0
+       RET
+
+TEXT ·t239(SB),0,$0
+       RET
+
+TEXT ·t240(SB),0,$0
+       RET
+
+TEXT ·t241(SB),0,$0
+       RET
+
+TEXT ·t242(SB),0,$0
+       RET
+
+TEXT ·t243(SB),0,$0
+       RET
+
+TEXT ·t244(SB),0,$0
+       RET
+
+TEXT ·t245(SB),0,$0
+       RET
+
+TEXT ·t246(SB),0,$0
+       RET
+
+TEXT ·t247(SB),0,$0
+       RET
+
+TEXT ·t248(SB),0,$0
+       RET
+
+TEXT ·t249(SB),0,$0
+       RET
+
+TEXT ·t250(SB),0,$0
+       RET
+
+TEXT ·t251(SB),0,$0
+       RET
+
+TEXT ·t252(SB),0,$0
+       RET
+
+TEXT ·t253(SB),0,$0
+       RET
+
+TEXT ·t254(SB),0,$0
+       RET
+
+-- gen.sh --
+#!/bin/sh
+# Generator script (for posterity, in case we need to
+# recreate or modify).
+N=255
+function cophdr() {
+    local F=$1
+    cat > $F <<EOF
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+EOF
+}
+#
+# Go source
+#
+cophdr a.go
+echo "package main" >> a.go
+echo "func main() { " >> a.go
+I=0
+while [ $I -lt $N ]; do
+    echo "  t${I}()" >> a.go
+    I=`expr $I + 1`
+done
+echo "}" >> a.go
+go
+echo  >> a.go
+I=0
+while [ $I -lt $N ]; do
+    echo "func t${I}() " >> a.go
+    I=`expr $I + 1`
+done
+#SALT=`date '+%Y%M%d%h%m%s'`
+#echo "var foofoo = \"${SALT}\"" >> a.go
+gofmt -w a.go
+#
+# Assembly sources
+#
+cophdr a.s
+I=0
+while [ $I -lt $N ]; do
+    echo "TEXT ·t${I}(SB),0,\$0" >> a.s
+    echo "     RET" >> a.s
+    echo >> a.s
+    I=`expr $I + 1`
+done
index ed0bab4c98e596db37e16e54fcf90bb5d84bca35..fbf6844b8ddae647a6212f9e9eccbd3b865e9052 100644 (file)
@@ -482,6 +482,30 @@ func FuncCountToDwTxtAddrFlavor(fncount int) (RelocType, int) {
        }
 }
 
+// DummyDwarfFunctionCountForAssembler returns a dummy value to be
+// used for "total number of functions in the package" for use in the
+// assembler (compiler does not call this function).
+//
+// Background/motivation: let's say we have a package P with some
+// assembly functions (in "a.s") and some Go functions (in
+// "b.go"). The compilation sequence used by the Go commmand will be:
+//
+// 1. run the assembler on a.s to generate a "symabis" file
+// 2. run the compiler on b.go passing it the symabis file and generating a "go_defs.h" asm header
+// 3. run the assembler on a.s passing it an include dir with the generated "go_defs.h" file
+//
+// When the compiler runs, it can easily determine the total function
+// count for the package (for use with FuncCountToDwTxtAddrFlavor
+// above) by counting defined Go funcs and looking at the symabis
+// file. With the assembler however there is no easy way for it to
+// figure out the total number of Go source funcs. To keep things
+// simple, we instead just use a dummy total function count while
+// running the assembler that will guarantee we pick a relocation
+// flavor that will work for any package size.
+func DummyDwarfFunctionCountForAssembler() int {
+       return 9999999
+}
+
 // DwTxtAddrRelocParams returns the maximum number of functions per
 // package supported for the DWARF .debug_addr relocation variant r,
 // along with the number of bytes it takes up in encoded form.