aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/ld/deadcode.go
diff options
context:
space:
mode:
authorMichel Lespinasse <walken@google.com>2016-03-17 07:00:33 -0700
committerMichel Lespinasse <walken@google.com>2016-03-29 02:18:56 +0000
commit79688ca58f59a65eee324694fd8a559dae8af149 (patch)
tree34397cb080d24b7ebe4ca4f47aced111ea9d8d44 /src/cmd/link/internal/ld/deadcode.go
parentf00bbd5f818f0a6b5b2fcf15422ad7fc4594225f (diff)
downloadgo-79688ca58f59a65eee324694fd8a559dae8af149.tar.xz
cmd/link: collect itablinks as a slice in moduledata
See #14874 This change tells the linker to collect all the itablink symbols and collect them so that moduledata can have a slice of all compiler generated itabs. The logic is shamelessly adapted from what is done with typelink symbols. Change-Id: Ie93b59acf0fcba908a876d506afbf796f222dbac Reviewed-on: https://go-review.googlesource.com/20889 Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/link/internal/ld/deadcode.go')
-rw-r--r--src/cmd/link/internal/ld/deadcode.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go
index f99f5e8984..e1badc2a48 100644
--- a/src/cmd/link/internal/ld/deadcode.go
+++ b/src/cmd/link/internal/ld/deadcode.go
@@ -107,10 +107,11 @@ func deadcode(ctxt *Link) {
}
if Buildmode != BuildmodeShared {
- // Keep a typelink if the symbol it points at is being kept.
- // (When BuildmodeShared, always keep typelinks.)
+ // Keep a typelink or itablink if the symbol it points at is being kept.
+ // (When BuildmodeShared, always keep typelinks and itablinks.)
for _, s := range ctxt.Allsym {
- if strings.HasPrefix(s.Name, "go.typelink.") {
+ if strings.HasPrefix(s.Name, "go.typelink.") ||
+ strings.HasPrefix(s.Name, "go.itablink.") {
s.Attr.Set(AttrReachable, len(s.R) == 1 && s.R[0].Sym.Attr.Reachable())
}
}