aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssagen/pgen.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-12-28 19:14:39 -0800
committerMatthew Dempsky <mdempsky@google.com>2020-12-29 07:54:40 +0000
commit25c613c02dabb45f3a3dc038a8f01c664d98731a (patch)
tree9a40e67713e82378a5cecad7e01e287e4c362b57 /src/cmd/compile/internal/ssagen/pgen.go
parent289da2b33ed6292c853017a15d3108d22ea7491a (diff)
downloadgo-25c613c02dabb45f3a3dc038a8f01c664d98731a.tar.gz
go-25c613c02dabb45f3a3dc038a8f01c664d98731a.zip
[dev.regabi] cmd/compile: add Linksym helpers
Syms are meant to be just interned (pkg, name) tuples, and are a purely abstract, Go-language concept. As such, associating them with linker symbols (a low-level, implementation-oriented detail) is inappropriate. There's still work to be done before linker symbols can be directly attached to their appropriate, higher-level objects instead. But in the mean-time, we can at least add helper functions and discourage folks from using Sym.Linksym directly. The next CL will mechanically rewrite code to use these helpers where possible. Passes toolstash -cmp. Change-Id: I413bd1c80bce056304f9a7343526bd153f2b9c7d Reviewed-on: https://go-review.googlesource.com/c/go/+/280639 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'src/cmd/compile/internal/ssagen/pgen.go')
-rw-r--r--src/cmd/compile/internal/ssagen/pgen.go14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/cmd/compile/internal/ssagen/pgen.go b/src/cmd/compile/internal/ssagen/pgen.go
index bc6be20d868..72ce233fdad 100644
--- a/src/cmd/compile/internal/ssagen/pgen.go
+++ b/src/cmd/compile/internal/ssagen/pgen.go
@@ -225,7 +225,7 @@ func StackOffset(slot ssa.LocalSlot) int32 {
// fieldtrack adds R_USEFIELD relocations to fnsym to record any
// struct fields that it used.
-func fieldtrack(fnsym *obj.LSym, tracked map[*types.Sym]struct{}) {
+func fieldtrack(fnsym *obj.LSym, tracked map[*obj.LSym]struct{}) {
if fnsym == nil {
return
}
@@ -233,24 +233,18 @@ func fieldtrack(fnsym *obj.LSym, tracked map[*types.Sym]struct{}) {
return
}
- trackSyms := make([]*types.Sym, 0, len(tracked))
+ trackSyms := make([]*obj.LSym, 0, len(tracked))
for sym := range tracked {
trackSyms = append(trackSyms, sym)
}
- sort.Sort(symByName(trackSyms))
+ sort.Slice(trackSyms, func(i, j int) bool { return trackSyms[i].Name < trackSyms[j].Name })
for _, sym := range trackSyms {
r := obj.Addrel(fnsym)
- r.Sym = sym.Linksym()
+ r.Sym = sym
r.Type = objabi.R_USEFIELD
}
}
-type symByName []*types.Sym
-
-func (a symByName) Len() int { return len(a) }
-func (a symByName) Less(i, j int) bool { return a[i].Name < a[j].Name }
-func (a symByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-
// largeStack is info about a function whose stack frame is too large (rare).
type largeStack struct {
locals int64