Commit 6424c40c authored by Hiroshi Ioka's avatar Hiroshi Ioka Committed by Ian Lance Taylor

cmd/link: don't emit default entry symbol in some situations

Also, fix comment.

Change-Id: Ieb7ba21f34730dc51ab45a652d225e4145d4b861
Reviewed-on: https://go-review.googlesource.com/54870
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent d03b89bd
...@@ -215,18 +215,29 @@ func (d *deadcodepass) init() { ...@@ -215,18 +215,29 @@ func (d *deadcodepass) init() {
} else { } else {
// In a normal binary, start at main.main and the init // In a normal binary, start at main.main and the init
// functions and mark what is reachable from there. // functions and mark what is reachable from there.
names = append(names, *flagEntrySymbol)
if *FlagLinkshared && (Buildmode == BuildmodeExe || Buildmode == BuildmodePIE) { if *FlagLinkshared && (Buildmode == BuildmodeExe || Buildmode == BuildmodePIE) {
names = append(names, "main.main", "main.init") names = append(names, "main.main", "main.init")
} else if Buildmode == BuildmodePlugin { } else {
names = append(names, *flagPluginPath+".init", *flagPluginPath+".main", "go.plugin.tabs") // The external linker refers main symbol directly.
if Linkmode == LinkExternal && (Buildmode == BuildmodeExe || Buildmode == BuildmodePIE) {
if Headtype == objabi.Hwindows && SysArch.Family == sys.I386 {
*flagEntrySymbol = "_main"
} else {
*flagEntrySymbol = "main"
}
}
names = append(names, *flagEntrySymbol)
if Buildmode == BuildmodePlugin {
names = append(names, *flagPluginPath+".init", *flagPluginPath+".main", "go.plugin.tabs")
// We don't keep the go.plugin.exports symbol, // We don't keep the go.plugin.exports symbol,
// but we do keep the symbols it refers to. // but we do keep the symbols it refers to.
exports := d.ctxt.Syms.ROLookup("go.plugin.exports", 0) exports := d.ctxt.Syms.ROLookup("go.plugin.exports", 0)
if exports != nil { if exports != nil {
for _, r := range exports.R { for _, r := range exports.R {
d.mark(r.Sym, nil) d.mark(r.Sym, nil)
}
} }
} }
} }
...@@ -240,7 +251,7 @@ func (d *deadcodepass) init() { ...@@ -240,7 +251,7 @@ func (d *deadcodepass) init() {
} }
} }
// flood flood fills symbols reachable from the markQueue symbols. // flood fills symbols reachable from the markQueue symbols.
// As it goes, it collects methodref and interface method declarations. // As it goes, it collects methodref and interface method declarations.
func (d *deadcodepass) flood() { func (d *deadcodepass) flood() {
for len(d.markQueue) > 0 { for len(d.markQueue) > 0 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment