From: Cherry Zhang Date: Thu, 14 May 2020 17:15:53 +0000 (-0400) Subject: [dev.link] cmd/link: simplify field tracking support X-Git-Tag: go1.16beta1~1378^2~130 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9963add628eb48edb5fbaafef156ebb899ce32bf;p=gostls13.git [dev.link] cmd/link: simplify field tracking support Currently, for the special field tracking symbol go.track.XXX, when they are reachable, we set its type to SCONST. There is no need to do that. Just leave it unset (as Sxxx). The symbol is done after this point. Change-Id: I966d80775008f7fb5d30fbc6b9e4a30ae8316b6c Reviewed-on: https://go-review.googlesource.com/c/go/+/233998 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Jeremy Faller --- diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 7254d2b172..da96b36882 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -191,6 +191,9 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) { st.err.Errorf(s, "invalid relocation %s: %d+%d not in [%d,%d)", rname, off, siz, 0, len(P)) continue } + if siz == 0 { // informational relocation - no work to do + continue + } var rst sym.SymKind if rs != 0 { @@ -218,9 +221,6 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) { if rt >= objabi.ElfRelocOffset { continue } - if siz == 0 { // informational relocation - no work to do - continue - } // We need to be able to reference dynimport symbols when linking against // shared libraries, and Solaris, Darwin and AIX need it always diff --git a/src/cmd/link/internal/ld/go.go b/src/cmd/link/internal/ld/go.go index 9a63a3a0bb..c3c987dcae 100644 --- a/src/cmd/link/internal/ld/go.go +++ b/src/cmd/link/internal/ld/go.go @@ -351,19 +351,15 @@ func fieldtrack(arch *sys.Arch, l *loader.Loader) { var buf bytes.Buffer for i := loader.Sym(1); i < loader.Sym(l.NSym()); i++ { if name := l.SymName(i); strings.HasPrefix(name, "go.track.") { - bld := l.MakeSymbolUpdater(i) - bld.SetSpecial(true) - bld.SetNotInSymbolTable(true) - if bld.Reachable() { + if l.AttrReachable(i) { + l.SetAttrSpecial(i, true) + l.SetAttrNotInSymbolTable(i, true) buf.WriteString(name[9:]) for p := l.Reachparent[i]; p != 0; p = l.Reachparent[p] { buf.WriteString("\t") buf.WriteString(l.SymName(p)) } buf.WriteString("\n") - - bld.SetType(sym.SCONST) - bld.SetValue(0) } } }