mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.link] cmd/link: load full symbol contents after deadcode pass
If the new object file format is used, now we load full symbol contents after the deadcode pass, for reachable symbols only. We still load some informations early, like relocations and the contents of type symbols, which are used in the deadcode pass. If we rewrite deadcode to use index directly, we could delay more of the loading (to sym.Symbol), and perhaps delay the creation of sym.Symbol. TODO: internal linking with host objects doesn't work yet. Change-Id: I7d4880e8f150e8709ffac277e62191623440e4cf Reviewed-on: https://go-review.googlesource.com/c/go/+/197258 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
parent
48151b3f0f
commit
2495095275
6 changed files with 227 additions and 100 deletions
|
|
@ -60,8 +60,8 @@ func deadcode(ctxt *Link) {
|
|||
d.init()
|
||||
d.flood()
|
||||
|
||||
callSym := ctxt.Syms.ROLookup("reflect.Value.Call", sym.SymVerABIInternal)
|
||||
methSym := ctxt.Syms.ROLookup("reflect.Value.Method", sym.SymVerABIInternal)
|
||||
callSym := ctxt.Lookup("reflect.Value.Call", sym.SymVerABIInternal)
|
||||
methSym := ctxt.Lookup("reflect.Value.Method", sym.SymVerABIInternal)
|
||||
reflectSeen := false
|
||||
|
||||
if ctxt.DynlinkingGo() {
|
||||
|
|
@ -283,7 +283,7 @@ func (d *deadcodepass) init() {
|
|||
|
||||
// We don't keep the go.plugin.exports symbol,
|
||||
// but we do keep the symbols it refers to.
|
||||
exports := d.ctxt.Syms.ROLookup("go.plugin.exports", 0)
|
||||
exports := d.ctxt.Lookup("go.plugin.exports", 0)
|
||||
if exports != nil {
|
||||
for i := range exports.R {
|
||||
d.mark(exports.R[i].Sym, nil)
|
||||
|
|
@ -298,9 +298,9 @@ func (d *deadcodepass) init() {
|
|||
|
||||
for _, name := range names {
|
||||
// Mark symbol as an data/ABI0 symbol.
|
||||
d.mark(d.ctxt.Syms.ROLookup(name, 0), nil)
|
||||
d.mark(d.ctxt.Lookup(name, 0), nil)
|
||||
// Also mark any Go functions (internal ABI).
|
||||
d.mark(d.ctxt.Syms.ROLookup(name, sym.SymVerABIInternal), nil)
|
||||
d.mark(d.ctxt.Lookup(name, sym.SymVerABIInternal), nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue