From d0e408334be22158fbf58a4d02789a48f5cb911e Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Sun, 30 Oct 2016 23:53:09 -0400 Subject: cmd/link: support plugins with no exported symbols A plugin with no exported symbols is still potentially very useful. Its init functions are called on load, and it so it can have visible side effects. Fixes #17681 Change-Id: Icdca31f48e5ab13c99020a2ef724f3de47dcd74b Reviewed-on: https://go-review.googlesource.com/32437 Run-TryBot: David Crawshaw Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/ld/deadcode.go | 6 ++++-- src/cmd/link/internal/ld/symtab.go | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 7ecc5b1ec2..ac64813228 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -252,8 +252,10 @@ 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) - for _, r := range exports.R { - d.mark(r.Sym, nil) + if exports != nil { + for _, r := range exports.R { + d.mark(r.Sym, nil) + } } } for _, name := range markextra { diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index ef96c04067..323136c6f9 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -588,8 +588,7 @@ func (ctxt *Link) symtab() { adduint(ctxt, moduledata, uint64(nitablinks)) adduint(ctxt, moduledata, uint64(nitablinks)) // The ptab slice - if Buildmode == BuildmodePlugin { - ptab := ctxt.Syms.ROLookup("go.plugin.tabs", 0) + if ptab := ctxt.Syms.ROLookup("go.plugin.tabs", 0); ptab != nil { ptab.Attr |= AttrReachable ptab.Attr |= AttrLocal ptab.Type = obj.SRODATA -- cgit v1.3-5-g9baa