1
0
mirror of https://github.com/golang/go synced 2024-11-15 11:30:36 -07:00

cmd/link: don't include deadcoded function symbols in shared build mode

In shared build mode, we include all symbols. This includes
function symbols that are deadcoded by the compiler. They don't
really get compiled, and their metadata may be missing, causing
linker failures. Skip them.

Fixes #67635.

Change-Id: Ic0e64bd032be499cca26da5e9e3ffbe9998bac05
Reviewed-on: https://go-review.googlesource.com/c/go/+/588316
Reviewed-by: Than McIntosh <thanm@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Cherry Mui 2024-05-24 18:04:11 -04:00
parent f7c330eac7
commit 98529a8e7c
2 changed files with 11 additions and 0 deletions

View File

@ -51,3 +51,8 @@ func F() int {
defer func() {}()
return V
}
func H() {
// Issue 67635: deadcoded closures causes linker crash.
func() { F() }()
}

View File

@ -50,6 +50,12 @@ func (d *deadcodePass) init() {
n := d.ldr.NDef()
for i := 1; i < n; i++ {
s := loader.Sym(i)
if d.ldr.SymType(s) == sym.STEXT && d.ldr.SymSize(s) == 0 {
// Zero-sized text symbol is a function deadcoded by the
// compiler. It doesn't really get compiled, and its
// metadata may be missing.
continue
}
d.mark(s, 0)
}
d.mark(d.ctxt.mainInittasks, 0)