From: Matthew Dempsky Date: Thu, 12 Mar 2020 19:14:02 +0000 (-0700) Subject: cmd/compile: skip generating args_stackmap for "pulled" funcs X-Git-Tag: go1.15beta1~793 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bb929b7452b5b8a6a584a94a110c98b0c6543a6e;p=gostls13.git cmd/compile: skip generating args_stackmap for "pulled" funcs In golang.org/cl/171464, we cleaned up generation of .stkobj linker symbols, but we couldn't figure out why a similar cleanup to .args_stackmap linker symbols caused problems. The issue is that we only need/want to generate .args_stackmap for functions that are implemented in assembly in the same package. When "pulling" a function from another package via //go:linkname, we can safely skip emitting .args_stackmap, because compiling that package will have generated it, if necessary. Fixes #31615. Change-Id: If8680aa7dd5b4e8f268b6b032d746f1b8536c867 Reviewed-on: https://go-review.googlesource.com/c/go/+/223238 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Cuong Manh Le Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index e8141b5237..6ccd0b8d94 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -12,7 +12,6 @@ import ( "cmd/internal/objabi" "cmd/internal/src" "cmd/internal/sys" - "fmt" "internal/race" "math/rand" "sort" @@ -28,11 +27,10 @@ var ( ) func emitptrargsmap(fn *Node) { - if fn.funcname() == "_" { + if fn.funcname() == "_" || fn.Func.Nname.Sym.Linkname != "" { return } - sym := lookup(fmt.Sprintf("%s.args_stackmap", fn.funcname())) - lsym := sym.Linksym() + lsym := Ctxt.Lookup(fn.Func.lsym.Name + ".args_stackmap") nptr := int(fn.Type.ArgWidth() / int64(Widthptr)) bv := bvalloc(int32(nptr) * 2)