mirror of
https://github.com/golang/go
synced 2024-11-15 11:40:35 -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:
parent
f7c330eac7
commit
98529a8e7c
@ -51,3 +51,8 @@ func F() int {
|
|||||||
defer func() {}()
|
defer func() {}()
|
||||||
return V
|
return V
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func H() {
|
||||||
|
// Issue 67635: deadcoded closures causes linker crash.
|
||||||
|
func() { F() }()
|
||||||
|
}
|
||||||
|
@ -50,6 +50,12 @@ func (d *deadcodePass) init() {
|
|||||||
n := d.ldr.NDef()
|
n := d.ldr.NDef()
|
||||||
for i := 1; i < n; i++ {
|
for i := 1; i < n; i++ {
|
||||||
s := loader.Sym(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(s, 0)
|
||||||
}
|
}
|
||||||
d.mark(d.ctxt.mainInittasks, 0)
|
d.mark(d.ctxt.mainInittasks, 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user