From d6d467372854124795cdd11429244ef1e28b809c Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 12 Jan 2021 23:55:08 -0800 Subject: [PATCH] [dev.regabi] cmd/compile: fix GOEXPERIMENT=regabi builder I misread the FIXME comment in InitLSym the first time. It's referring to how InitLSym is supposed to be called exactly once per function (see function documentation), but this is evidently not actually the case currently in GOEXPERIMENT=regabi mode. So just move the NeedFuncSym call below the GOEXPERIMENT=regabi workaround. Also, to fix the linux-arm64-{aws,packet} builders, move the call to reflectdata.WriteFuncSyms() to after the second batch of functions are compiled. This is necessary to make sure we catch all the funcsyms that can be added by late function compilation. Change-Id: I6d6396d48e2ee29c1fb007fa2b99e065b36375db Reviewed-on: https://go-review.googlesource.com/c/go/+/283552 Run-TryBot: Matthew Dempsky Trust: Matthew Dempsky TryBot-Result: Go Bot Reviewed-by: Keith Randall Reviewed-by: Than McIntosh --- src/cmd/compile/internal/gc/obj.go | 2 +- src/cmd/compile/internal/ssagen/abi.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/gc/obj.go b/src/cmd/compile/internal/gc/obj.go index 753db80f76..3e55b7688e 100644 --- a/src/cmd/compile/internal/gc/obj.go +++ b/src/cmd/compile/internal/gc/obj.go @@ -111,7 +111,6 @@ func dumpdata() { numDecls := len(typecheck.Target.Decls) dumpglobls(typecheck.Target.Externs) - staticdata.WriteFuncSyms() reflectdata.CollectPTabs() numExports := len(typecheck.Target.Exports) addsignats(typecheck.Target.Externs) @@ -151,6 +150,7 @@ func dumpdata() { objw.Global(zero, int32(reflectdata.ZeroSize), obj.DUPOK|obj.RODATA) } + staticdata.WriteFuncSyms() addGCLocals() if numExports != len(typecheck.Target.Exports) { diff --git a/src/cmd/compile/internal/ssagen/abi.go b/src/cmd/compile/internal/ssagen/abi.go index dc27ec3a29..f1226f6a47 100644 --- a/src/cmd/compile/internal/ssagen/abi.go +++ b/src/cmd/compile/internal/ssagen/abi.go @@ -138,13 +138,12 @@ func ReadSymABIs(file, myimportpath string) { // For body-less functions, we only create the LSym; for functions // with bodies call a helper to setup up / populate the LSym. func InitLSym(f *ir.Func, hasBody bool) { - staticdata.NeedFuncSym(f.Sym()) - // FIXME: for new-style ABI wrappers, we set up the lsym at the // point the wrapper is created. if f.LSym != nil && base.Flag.ABIWrap { return } + staticdata.NeedFuncSym(f.Sym()) selectLSym(f, hasBody) if hasBody { setupTextLSym(f, 0) -- 2.50.0